{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# **Section3_Use Torchquantum on Pulse Level**"
      ],
      "metadata": {
        "id": "iYVG7W6BghRw"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Setup"
      ],
      "metadata": {
        "id": "0qvui6fmg7Sv"
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "BgLkdnjhLiK7",
        "outputId": "16cd60ff-9852-47aa-aa29-c2bfee9c9cde"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Installing torchquantum...\n",
            "fatal: destination path 'torchquantum' already exists and is not an empty directory.\n",
            "/content/torchquantum\n",
            "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "qiskit-nature 0.4.4 requires qiskit-terra>=0.21.0, but you have qiskit-terra 0.18.3 which is incompatible.\u001b[0m\n"
          ]
        }
      ],
      "source": [
        "print('Installing torchquantum...')\n",
        "!git clone https://github.com/mit-han-lab/torchquantum.git\n",
        "%cd /content/torchquantum\n",
        "!pip install --editable . 1>/dev/null"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install qiskit_nature==0.4.4"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 748
        },
        "id": "Jbhj5196LkpI",
        "outputId": "c435d914-49b6-4117-ab4b-26a0670924a2"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Requirement already satisfied: qiskit_nature==0.4.4 in /usr/local/lib/python3.7/dist-packages (0.4.4)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (4.1.1)\n",
            "Requirement already satisfied: scipy>=1.4 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (1.7.3)\n",
            "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (1.21.6)\n",
            "Collecting qiskit-terra>=0.21.0\n",
            "  Using cached qiskit_terra-0.21.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB)\n",
            "Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (1.0.2)\n",
            "Requirement already satisfied: setuptools>=40.1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (57.4.0)\n",
            "Requirement already satisfied: retworkx>=0.10.1 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (0.11.0)\n",
            "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (5.4.8)\n",
            "Requirement already satisfied: h5py in /usr/local/lib/python3.7/dist-packages (from qiskit_nature==0.4.4) (3.1.0)\n",
            "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (3.5.0)\n",
            "Requirement already satisfied: shared-memory38 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (0.1.2)\n",
            "Requirement already satisfied: tweedledum<2.0,>=1.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (1.1.1)\n",
            "Requirement already satisfied: symengine>=0.9 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (0.9.2)\n",
            "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (1.7.1)\n",
            "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (3.11)\n",
            "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (0.3.5.1)\n",
            "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (2.8.2)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.8.0->qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (1.15.0)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit_nature==0.4.4) (1.1.0)\n",
            "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit_nature==0.4.4) (3.1.0)\n",
            "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from stevedore>=3.0.0->qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (5.10.0)\n",
            "Requirement already satisfied: importlib-metadata>=1.7.0 in /usr/local/lib/python3.7/dist-packages (from stevedore>=3.0.0->qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (4.12.0)\n",
            "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=1.7.0->stevedore>=3.0.0->qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (3.8.1)\n",
            "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.7/dist-packages (from sympy>=1.3->qiskit-terra>=0.21.0->qiskit_nature==0.4.4) (1.2.1)\n",
            "Requirement already satisfied: cached-property in /usr/local/lib/python3.7/dist-packages (from h5py->qiskit_nature==0.4.4) (1.5.2)\n",
            "Installing collected packages: qiskit-terra\n",
            "  Attempting uninstall: qiskit-terra\n",
            "    Found existing installation: qiskit-terra 0.18.3\n",
            "    Uninstalling qiskit-terra-0.18.3:\n",
            "      Successfully uninstalled qiskit-terra-0.18.3\n",
            "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "qiskit 0.32.1 requires qiskit-terra==0.18.3, but you have qiskit-terra 0.21.2 which is incompatible.\u001b[0m\n",
            "Successfully installed qiskit-terra-0.21.2\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.colab-display-data+json": {
              "pip_warning": {
                "packages": [
                  "qiskit"
                ]
              }
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install qiskit==0.38.0"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "IYK1GsldLuhq",
        "outputId": "c9a72cf2-d2b4-43f1-892f-2d3b249fc7c9"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Collecting qiskit==0.38.0\n",
            "  Using cached qiskit-0.38.0-py3-none-any.whl\n",
            "Collecting qiskit-aer==0.11.0\n",
            "  Using cached qiskit_aer-0.11.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.2 MB)\n",
            "Requirement already satisfied: qiskit-terra==0.21.2 in /usr/local/lib/python3.7/dist-packages (from qiskit==0.38.0) (0.21.2)\n",
            "Collecting qiskit-ibmq-provider==0.19.2\n",
            "  Using cached qiskit_ibmq_provider-0.19.2-py3-none-any.whl (240 kB)\n",
            "Requirement already satisfied: scipy>=1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aer==0.11.0->qiskit==0.38.0) (1.7.3)\n",
            "Requirement already satisfied: numpy>=1.16.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-aer==0.11.0->qiskit==0.38.0) (1.21.6)\n",
            "Requirement already satisfied: requests>=2.19 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2.28.1)\n",
            "Requirement already satisfied: websockets>=10.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (10.3)\n",
            "Requirement already satisfied: urllib3>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.24.3)\n",
            "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2.8.2)\n",
            "Requirement already satisfied: requests-ntlm>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.1.0)\n",
            "Requirement already satisfied: websocket-client>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.4.1)\n",
            "Requirement already satisfied: symengine>=0.9 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (0.9.2)\n",
            "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (1.7.1)\n",
            "Requirement already satisfied: shared-memory38 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (0.1.2)\n",
            "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (0.3.5.1)\n",
            "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (3.11)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (4.1.1)\n",
            "Requirement already satisfied: retworkx>=0.11.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (0.11.0)\n",
            "Requirement already satisfied: tweedledum<2.0,>=1.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (1.1.1)\n",
            "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (5.4.8)\n",
            "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.21.2->qiskit==0.38.0) (3.5.0)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.8.0->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.15.0)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2022.6.15)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2.10)\n",
            "Requirement already satisfied: charset-normalizer<3,>=2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2.1.1)\n",
            "Requirement already satisfied: cryptography>=1.3 in /usr/local/lib/python3.7/dist-packages (from requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (38.0.1)\n",
            "Requirement already satisfied: ntlm-auth>=1.0.2 in /usr/local/lib/python3.7/dist-packages (from requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.5.0)\n",
            "Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (1.15.1)\n",
            "Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.19.2->qiskit==0.38.0) (2.21)\n",
            "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from stevedore>=3.0.0->qiskit-terra==0.21.2->qiskit==0.38.0) (5.10.0)\n",
            "Requirement already satisfied: importlib-metadata>=1.7.0 in /usr/local/lib/python3.7/dist-packages (from stevedore>=3.0.0->qiskit-terra==0.21.2->qiskit==0.38.0) (4.12.0)\n",
            "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=1.7.0->stevedore>=3.0.0->qiskit-terra==0.21.2->qiskit==0.38.0) (3.8.1)\n",
            "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.7/dist-packages (from sympy>=1.3->qiskit-terra==0.21.2->qiskit==0.38.0) (1.2.1)\n",
            "Installing collected packages: qiskit-ibmq-provider, qiskit-aer, qiskit\n",
            "  Attempting uninstall: qiskit-ibmq-provider\n",
            "    Found existing installation: qiskit-ibmq-provider 0.18.1\n",
            "    Uninstalling qiskit-ibmq-provider-0.18.1:\n",
            "      Successfully uninstalled qiskit-ibmq-provider-0.18.1\n",
            "  Attempting uninstall: qiskit-aer\n",
            "    Found existing installation: qiskit-aer 0.9.1\n",
            "    Uninstalling qiskit-aer-0.9.1:\n",
            "      Successfully uninstalled qiskit-aer-0.9.1\n",
            "  Attempting uninstall: qiskit\n",
            "    Found existing installation: qiskit 0.32.1\n",
            "    Uninstalling qiskit-0.32.1:\n",
            "      Successfully uninstalled qiskit-0.32.1\n",
            "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "torchquantum 0.1.2 requires qiskit==0.32.1, but you have qiskit 0.38.0 which is incompatible.\u001b[0m\n",
            "Successfully installed qiskit-0.38.0 qiskit-aer-0.11.0 qiskit-ibmq-provider-0.19.2\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.colab-display-data+json": {
              "pip_warning": {
                "packages": [
                  "qiskit",
                  "qiskit_aer"
                ]
              }
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install matplotlib==3.1.3"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 444
        },
        "id": "KNf52acguGpM",
        "outputId": "a85550dc-0493-4d9e-e32b-1442d7cb207d"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Collecting matplotlib==3.1.3\n",
            "  Using cached matplotlib-3.1.3-cp37-cp37m-manylinux1_x86_64.whl (13.1 MB)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (2.8.2)\n",
            "Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (1.21.6)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (3.0.9)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (0.11.0)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (1.4.4)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from kiwisolver>=1.0.1->matplotlib==3.1.3) (4.1.1)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib==3.1.3) (1.15.0)\n",
            "Installing collected packages: matplotlib\n",
            "  Attempting uninstall: matplotlib\n",
            "    Found existing installation: matplotlib 3.5.3\n",
            "    Uninstalling matplotlib-3.5.3:\n",
            "      Successfully uninstalled matplotlib-3.5.3\n",
            "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "torchquantum 0.1.2 requires matplotlib>=3.3.2, but you have matplotlib 3.1.3 which is incompatible.\n",
            "torchquantum 0.1.2 requires qiskit==0.32.1, but you have qiskit 0.38.0 which is incompatible.\u001b[0m\n",
            "Successfully installed matplotlib-3.1.3\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.colab-display-data+json": {
              "pip_warning": {
                "packages": [
                  "matplotlib",
                  "mpl_toolkits"
                ]
              }
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from torchquantum.pulse_utils import *\n",
        "import torch\n",
        "import torch.nn.functional as F\n",
        "import torch.optim as optim\n",
        "import argparse"
      ],
      "metadata": {
        "id": "syQ7I8rEMI-H"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "import torchquantum as tq\n",
        "import torchquantum.functional as tqf\n",
        "import pdb\n",
        "import numpy as np\n",
        "from matplotlib import pyplot as plt"
      ],
      "metadata": {
        "id": "3KOs5g5ldqE3"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# **3.1 Quantum Optimal Control**"
      ],
      "metadata": {
        "id": "k4fF5ASdhqZX"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Optimal control can be used to achieve efficient state preparation, state-to-state transfer or some unitary matrix on a quantum system. Current quantum systems can be manipulated in a controlled way, such as the time-varying amplitude of microwave pulses that act on a superconducting circuit.\n",
        "\n",
        "In the simple example below, QOC is used to achieve a rotation gate, and we use pulses to achieve such target. The pulses are composed of four time steps with different amplitudes. The control Hamiltonian is the Pauli-X. In this gradient-based optimization we will be able to achieve the target unitary with desired accuracy."
      ],
      "metadata": {
        "id": "kjLhsVWGG5u0"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "theta = 0.6\n",
        "target_unitary = torch.tensor([[np.cos(theta/2), -1j*np.sin(theta/2)], [-1j*np.sin(theta/2), np.cos(theta/2)]], dtype=torch.complex64)\n",
        "# The target_unitary is a simple rotation gate with angle = 0.6;\n",
        "pulse = tq.QuantumPulseDirect(n_steps=4,\n",
        "                              hamil=[[0, 1], [1, 0]])\n",
        "# The pulse has 4 time slots and the drive Hamiltonian is the Pauli-X.\n",
        "optimizer = optim.Adam(params=pulse.parameters(),  lr=5e-3)\n",
        "\n",
        "# TODO(jinleic): \n",
        "# add Bloch Sphere here\n",
        "# add figure for pulse time slots\n",
        "# Can we see the learning curve?\n",
        "losses = []\n",
        "\n",
        "for k in range(100):\n",
        "    # loss = (abs(pulse.get_unitary() - target_unitary)**2).sum()\n",
        "    loss = 1 - (torch.trace(pulse.get_unitary() @ target_unitary) / target_unitary.shape[0]).abs() ** 2\n",
        "    optimizer.zero_grad()\n",
        "    loss.backward()\n",
        "    optimizer.step()\n",
        "    losses.append(loss.item())\n",
        "    # print(pulse.pulse_shape.grad)\n",
        "    # print(loss)\n",
        "    print(pulse.pulse_shape)\n",
        "    print(pulse.get_unitary())\n",
        "plt.xlabel(\"Number of Iterations\")\n",
        "plt.ylabel(\"Training Losses\")\n",
        "plt.title(\"Training from Default Initialization\")\n",
        "plt.plot(losses[:100])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "fccmCcyOh1PA",
        "outputId": "952bf38a-d1f8-47f6-b8db-2b975c410b5e"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Parameter containing:\n",
            "tensor([0.9950, 0.9950, 0.9950, 0.9950], requires_grad=True)\n",
            "tensor([[-0.6686+0.0000j,  0.0000+0.7436j],\n",
            "        [ 0.0000+0.7436j, -0.6686+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9900, 0.9900, 0.9900, 0.9900], requires_grad=True)\n",
            "tensor([[-0.6834+0.0000j,  0.0000+0.7300j],\n",
            "        [ 0.0000+0.7300j, -0.6834+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9850, 0.9850, 0.9850, 0.9850], requires_grad=True)\n",
            "tensor([[-0.6979+0.0000j,  0.0000+0.7162j],\n",
            "        [ 0.0000+0.7162j, -0.6979+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9800, 0.9800, 0.9800, 0.9800], requires_grad=True)\n",
            "tensor([[-0.7121+0.0000j,  0.0000+0.7021j],\n",
            "        [ 0.0000+0.7021j, -0.7121+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9749, 0.9749, 0.9749, 0.9749], requires_grad=True)\n",
            "tensor([[-0.7261+0.0000j,  0.0000+0.6876j],\n",
            "        [ 0.0000+0.6876j, -0.7261+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9699, 0.9699, 0.9699, 0.9699], requires_grad=True)\n",
            "tensor([[-0.7398+0.0000j,  0.0000+0.6728j],\n",
            "        [ 0.0000+0.6728j, -0.7398+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9649, 0.9649, 0.9649, 0.9649], requires_grad=True)\n",
            "tensor([[-0.7532+0.0000j,  0.0000+0.6577j],\n",
            "        [ 0.0000+0.6577j, -0.7532+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9598, 0.9598, 0.9598, 0.9598], requires_grad=True)\n",
            "tensor([[-0.7664+0.0000j,  0.0000+0.6423j],\n",
            "        [ 0.0000+0.6423j, -0.7664+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9547, 0.9547, 0.9547, 0.9547], requires_grad=True)\n",
            "tensor([[-0.7793+0.0000j,  0.0000+0.6266j],\n",
            "        [ 0.0000+0.6266j, -0.7793+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9496, 0.9496, 0.9496, 0.9496], requires_grad=True)\n",
            "tensor([[-0.7919+0.0000j,  0.0000+0.6106j],\n",
            "        [ 0.0000+0.6106j, -0.7919+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9445, 0.9445, 0.9445, 0.9445], requires_grad=True)\n",
            "tensor([[-0.8042+0.0000j,  0.0000+0.5943j],\n",
            "        [ 0.0000+0.5943j, -0.8042+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9394, 0.9394, 0.9394, 0.9394], requires_grad=True)\n",
            "tensor([[-0.8162+0.0000j,  0.0000+0.5777j],\n",
            "        [ 0.0000+0.5777j, -0.8162+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9342, 0.9342, 0.9342, 0.9342], requires_grad=True)\n",
            "tensor([[-0.8279+0.0000j,  0.0000+0.5608j],\n",
            "        [ 0.0000+0.5608j, -0.8279+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9291, 0.9291, 0.9291, 0.9291], requires_grad=True)\n",
            "tensor([[-0.8393+0.0000j,  0.0000+0.5437j],\n",
            "        [ 0.0000+0.5437j, -0.8393+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9239, 0.9239, 0.9239, 0.9239], requires_grad=True)\n",
            "tensor([[-0.8504+0.0000j,  0.0000+0.5262j],\n",
            "        [ 0.0000+0.5262j, -0.8504+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9188, 0.9188, 0.9188, 0.9188], requires_grad=True)\n",
            "tensor([[-0.8611+0.0000j,  0.0000+0.5085j],\n",
            "        [ 0.0000+0.5085j, -0.8611+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9136, 0.9136, 0.9136, 0.9136], requires_grad=True)\n",
            "tensor([[-0.8714+0.0000j,  0.0000+0.4905j],\n",
            "        [ 0.0000+0.4905j, -0.8714+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9084, 0.9084, 0.9084, 0.9084], requires_grad=True)\n",
            "tensor([[-0.8814+0.0000j,  0.0000+0.4723j],\n",
            "        [ 0.0000+0.4723j, -0.8814+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.9032, 0.9032, 0.9032, 0.9032], requires_grad=True)\n",
            "tensor([[-0.8911+0.0000j,  0.0000+0.4538j],\n",
            "        [ 0.0000+0.4538j, -0.8911+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8980, 0.8980, 0.8980, 0.8980], requires_grad=True)\n",
            "tensor([[-0.9003+0.0000j,  0.0000+0.4352j],\n",
            "        [ 0.0000+0.4352j, -0.9003+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8927, 0.8927, 0.8927, 0.8927], requires_grad=True)\n",
            "tensor([[-0.9092+0.0000j,  0.0000+0.4163j],\n",
            "        [ 0.0000+0.4163j, -0.9092+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8875, 0.8875, 0.8875, 0.8875], requires_grad=True)\n",
            "tensor([[-0.9177+0.0000j,  0.0000+0.3972j],\n",
            "        [ 0.0000+0.3972j, -0.9177+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8823, 0.8823, 0.8823, 0.8823], requires_grad=True)\n",
            "tensor([[-0.9258+0.0000j,  0.0000+0.3780j],\n",
            "        [ 0.0000+0.3780j, -0.9258+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8771, 0.8771, 0.8771, 0.8771], requires_grad=True)\n",
            "tensor([[-0.9335+0.0000j,  0.0000+0.3586j],\n",
            "        [ 0.0000+0.3586j, -0.9335+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8719, 0.8719, 0.8719, 0.8719], requires_grad=True)\n",
            "tensor([[-0.9407+0.0000j,  0.0000+0.3391j],\n",
            "        [ 0.0000+0.3391j, -0.9407+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8667, 0.8667, 0.8667, 0.8667], requires_grad=True)\n",
            "tensor([[-0.9476+0.0000j,  0.0000+0.3195j],\n",
            "        [ 0.0000+0.3195j, -0.9476+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8615, 0.8615, 0.8615, 0.8615], requires_grad=True)\n",
            "tensor([[-0.9540+0.0000j,  0.0000+0.2998j],\n",
            "        [ 0.0000+0.2998j, -0.9540+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8564, 0.8564, 0.8564, 0.8564], requires_grad=True)\n",
            "tensor([[-0.9600+0.0000j,  0.0000+0.2801j],\n",
            "        [ 0.0000+0.2801j, -0.9600+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8512, 0.8512, 0.8512, 0.8512], requires_grad=True)\n",
            "tensor([[-0.9655+0.0000j,  0.0000+0.2603j],\n",
            "        [ 0.0000+0.2603j, -0.9655+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8461, 0.8461, 0.8461, 0.8461], requires_grad=True)\n",
            "tensor([[-0.9707+0.0000j,  0.0000+0.2405j],\n",
            "        [ 0.0000+0.2405j, -0.9707+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8410, 0.8410, 0.8410, 0.8410], requires_grad=True)\n",
            "tensor([[-0.9753+0.0000j,  0.0000+0.2207j],\n",
            "        [ 0.0000+0.2207j, -0.9753+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8360, 0.8360, 0.8360, 0.8360], requires_grad=True)\n",
            "tensor([[-0.9796+0.0000j,  0.0000+0.2009j],\n",
            "        [ 0.0000+0.2009j, -0.9796+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8310, 0.8310, 0.8310, 0.8310], requires_grad=True)\n",
            "tensor([[-0.9834+0.0000j,  0.0000+0.1812j],\n",
            "        [ 0.0000+0.1812j, -0.9834+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8260, 0.8260, 0.8260, 0.8260], requires_grad=True)\n",
            "tensor([[-0.9869+0.0000j,  0.0000+0.1616j],\n",
            "        [ 0.0000+0.1616j, -0.9869+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8211, 0.8211, 0.8211, 0.8211], requires_grad=True)\n",
            "tensor([[-0.9898+0.0000j,  0.0000+0.1422j],\n",
            "        [ 0.0000+0.1422j, -0.9898+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8162, 0.8162, 0.8162, 0.8162], requires_grad=True)\n",
            "tensor([[-0.9924+0.0000j,  0.0000+0.1229j],\n",
            "        [ 0.0000+0.1229j, -0.9924+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8114, 0.8114, 0.8114, 0.8114], requires_grad=True)\n",
            "tensor([[-0.9946+0.0000j,  0.0000+0.1037j],\n",
            "        [ 0.0000+0.1037j, -0.9946+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8066, 0.8066, 0.8066, 0.8066], requires_grad=True)\n",
            "tensor([[-0.9964+0.0000j,  0.0000+0.0848j],\n",
            "        [ 0.0000+0.0848j, -0.9964+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.8019, 0.8019, 0.8019, 0.8019], requires_grad=True)\n",
            "tensor([[-0.9978+0.0000j,  0.0000+0.0661j],\n",
            "        [ 0.0000+0.0661j, -0.9978+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7973, 0.7973, 0.7973, 0.7973], requires_grad=True)\n",
            "tensor([[-0.9989+0.0000j,  0.0000+0.0477j],\n",
            "        [ 0.0000+0.0477j, -0.9989+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7928, 0.7928, 0.7928, 0.7928], requires_grad=True)\n",
            "tensor([[-0.9996+0.0000j,  0.0000+0.0296j],\n",
            "        [ 0.0000+0.0296j, -0.9996+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7883, 0.7883, 0.7883, 0.7883], requires_grad=True)\n",
            "tensor([[-0.9999+0.0000j,  0.0000+0.0118j],\n",
            "        [ 0.0000+0.0118j, -0.9999+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7840, 0.7840, 0.7840, 0.7840], requires_grad=True)\n",
            "tensor([[-1.0000+0.0000j,  0.0000-0.0057j],\n",
            "        [ 0.0000-0.0057j, -1.0000+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7797, 0.7797, 0.7797, 0.7797], requires_grad=True)\n",
            "tensor([[-0.9997+0.0000j,  0.0000-0.0228j],\n",
            "        [ 0.0000-0.0228j, -0.9997+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7755, 0.7755, 0.7755, 0.7755], requires_grad=True)\n",
            "tensor([[-0.9992+0.0000j,  0.0000-0.0395j],\n",
            "        [ 0.0000-0.0395j, -0.9992+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7714, 0.7714, 0.7714, 0.7714], requires_grad=True)\n",
            "tensor([[-0.9984+0.0000j,  0.0000-0.0558j],\n",
            "        [ 0.0000-0.0558j, -0.9984+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7675, 0.7675, 0.7675, 0.7675], requires_grad=True)\n",
            "tensor([[-0.9974+0.0000j,  0.0000-0.0716j],\n",
            "        [ 0.0000-0.0716j, -0.9974+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7636, 0.7636, 0.7636, 0.7636], requires_grad=True)\n",
            "tensor([[-0.9962+0.0000j,  0.0000-0.0870j],\n",
            "        [ 0.0000-0.0870j, -0.9962+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7599, 0.7599, 0.7599, 0.7599], requires_grad=True)\n",
            "tensor([[-0.9948+0.0000j,  0.0000-0.1020j],\n",
            "        [ 0.0000-0.1020j, -0.9948+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7562, 0.7562, 0.7562, 0.7562], requires_grad=True)\n",
            "tensor([[-0.9932+0.0000j,  0.0000-0.1164j],\n",
            "        [ 0.0000-0.1164j, -0.9932+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7527, 0.7527, 0.7527, 0.7527], requires_grad=True)\n",
            "tensor([[-0.9915+0.0000j,  0.0000-0.1303j],\n",
            "        [ 0.0000-0.1303j, -0.9915+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7493, 0.7493, 0.7493, 0.7493], requires_grad=True)\n",
            "tensor([[-0.9896+0.0000j,  0.0000-0.1438j],\n",
            "        [ 0.0000-0.1438j, -0.9896+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7461, 0.7461, 0.7461, 0.7461], requires_grad=True)\n",
            "tensor([[-0.9876+0.0000j,  0.0000-0.1567j],\n",
            "        [ 0.0000-0.1567j, -0.9876+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7429, 0.7429, 0.7429, 0.7429], requires_grad=True)\n",
            "tensor([[-0.9856+0.0000j,  0.0000-0.1691j],\n",
            "        [ 0.0000-0.1691j, -0.9856+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7399, 0.7399, 0.7399, 0.7399], requires_grad=True)\n",
            "tensor([[-0.9835+0.0000j,  0.0000-0.1809j],\n",
            "        [ 0.0000-0.1809j, -0.9835+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7370, 0.7370, 0.7370, 0.7370], requires_grad=True)\n",
            "tensor([[-0.9814+0.0000j,  0.0000-0.1922j],\n",
            "        [ 0.0000-0.1922j, -0.9814+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7343, 0.7343, 0.7343, 0.7343], requires_grad=True)\n",
            "tensor([[-0.9792+0.0000j,  0.0000-0.2030j],\n",
            "        [ 0.0000-0.2030j, -0.9792+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7317, 0.7317, 0.7317, 0.7317], requires_grad=True)\n",
            "tensor([[-0.9770+0.0000j,  0.0000-0.2132j],\n",
            "        [ 0.0000-0.2132j, -0.9770+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7292, 0.7292, 0.7292, 0.7292], requires_grad=True)\n",
            "tensor([[-0.9748+0.0000j,  0.0000-0.2229j],\n",
            "        [ 0.0000-0.2229j, -0.9748+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7268, 0.7268, 0.7268, 0.7268], requires_grad=True)\n",
            "tensor([[-0.9727+0.0000j,  0.0000-0.2321j],\n",
            "        [ 0.0000-0.2321j, -0.9727+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7246, 0.7246, 0.7246, 0.7246], requires_grad=True)\n",
            "tensor([[-0.9706+0.0000j,  0.0000-0.2407j],\n",
            "        [ 0.0000-0.2407j, -0.9706+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7225, 0.7225, 0.7225, 0.7225], requires_grad=True)\n",
            "tensor([[-0.9686+0.0000j,  0.0000-0.2488j],\n",
            "        [ 0.0000-0.2488j, -0.9686+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7206, 0.7206, 0.7206, 0.7206], requires_grad=True)\n",
            "tensor([[-0.9666+0.0000j,  0.0000-0.2564j],\n",
            "        [ 0.0000-0.2564j, -0.9666+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7187, 0.7187, 0.7187, 0.7187], requires_grad=True)\n",
            "tensor([[-0.9647+0.0000j,  0.0000-0.2635j],\n",
            "        [ 0.0000-0.2635j, -0.9647+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7170, 0.7170, 0.7170, 0.7170], requires_grad=True)\n",
            "tensor([[-0.9628+0.0000j,  0.0000-0.2700j],\n",
            "        [ 0.0000-0.2700j, -0.9628+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7155, 0.7155, 0.7155, 0.7155], requires_grad=True)\n",
            "tensor([[-0.9611+0.0000j,  0.0000-0.2761j],\n",
            "        [ 0.0000-0.2761j, -0.9611+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7140, 0.7140, 0.7140, 0.7140], requires_grad=True)\n",
            "tensor([[-0.9595+0.0000j,  0.0000-0.2818j],\n",
            "        [ 0.0000-0.2818j, -0.9595+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7126, 0.7126, 0.7126, 0.7126], requires_grad=True)\n",
            "tensor([[-0.9579+0.0000j,  0.0000-0.2869j],\n",
            "        [ 0.0000-0.2869j, -0.9579+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7114, 0.7114, 0.7114, 0.7114], requires_grad=True)\n",
            "tensor([[-0.9565+0.0000j,  0.0000-0.2917j],\n",
            "        [ 0.0000-0.2917j, -0.9565+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7103, 0.7103, 0.7103, 0.7103], requires_grad=True)\n",
            "tensor([[-0.9552+0.0000j,  0.0000-0.2960j],\n",
            "        [ 0.0000-0.2960j, -0.9552+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7093, 0.7093, 0.7093, 0.7093], requires_grad=True)\n",
            "tensor([[-0.9540+0.0000j,  0.0000-0.2999j],\n",
            "        [ 0.0000-0.2999j, -0.9540+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7083, 0.7083, 0.7083, 0.7083], requires_grad=True)\n",
            "tensor([[-0.9529+0.0000j,  0.0000-0.3034j],\n",
            "        [ 0.0000-0.3034j, -0.9529+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7075, 0.7075, 0.7075, 0.7075], requires_grad=True)\n",
            "tensor([[-0.9519+0.0000j,  0.0000-0.3065j],\n",
            "        [ 0.0000-0.3065j, -0.9519+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7068, 0.7068, 0.7068, 0.7068], requires_grad=True)\n",
            "tensor([[-0.9510+0.0000j,  0.0000-0.3093j],\n",
            "        [ 0.0000-0.3093j, -0.9510+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7062, 0.7062, 0.7062, 0.7062], requires_grad=True)\n",
            "tensor([[-0.9502+0.0000j,  0.0000-0.3117j],\n",
            "        [ 0.0000-0.3117j, -0.9502+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7056, 0.7056, 0.7056, 0.7056], requires_grad=True)\n",
            "tensor([[-0.9495+0.0000j,  0.0000-0.3138j],\n",
            "        [ 0.0000-0.3138j, -0.9495+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7051, 0.7051, 0.7051, 0.7051], requires_grad=True)\n",
            "tensor([[-0.9489+0.0000j,  0.0000-0.3156j],\n",
            "        [ 0.0000-0.3156j, -0.9489+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7047, 0.7047, 0.7047, 0.7047], requires_grad=True)\n",
            "tensor([[-0.9484+0.0000j,  0.0000-0.3171j],\n",
            "        [ 0.0000-0.3171j, -0.9484+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7044, 0.7044, 0.7044, 0.7044], requires_grad=True)\n",
            "tensor([[-0.9480+0.0000j,  0.0000-0.3183j],\n",
            "        [ 0.0000-0.3183j, -0.9480+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7041, 0.7041, 0.7041, 0.7041], requires_grad=True)\n",
            "tensor([[-0.9476+0.0000j,  0.0000-0.3193j],\n",
            "        [ 0.0000-0.3193j, -0.9476+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7040, 0.7040, 0.7040, 0.7040], requires_grad=True)\n",
            "tensor([[-0.9474+0.0000j,  0.0000-0.3201j],\n",
            "        [ 0.0000-0.3201j, -0.9474+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7038, 0.7038, 0.7038, 0.7038], requires_grad=True)\n",
            "tensor([[-0.9472+0.0000j,  0.0000-0.3206j],\n",
            "        [ 0.0000-0.3206j, -0.9472+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7037, 0.7037, 0.7037, 0.7037], requires_grad=True)\n",
            "tensor([[-0.9471+0.0000j,  0.0000-0.3209j],\n",
            "        [ 0.0000-0.3209j, -0.9471+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7037, 0.7037, 0.7037, 0.7037], requires_grad=True)\n",
            "tensor([[-0.9471+0.0000j,  0.0000-0.3210j],\n",
            "        [ 0.0000-0.3210j, -0.9471+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7037, 0.7037, 0.7037, 0.7037], requires_grad=True)\n",
            "tensor([[-0.9471+0.0000j,  0.0000-0.3210j],\n",
            "        [ 0.0000-0.3210j, -0.9471+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7038, 0.7038, 0.7038, 0.7038], requires_grad=True)\n",
            "tensor([[-0.9471+0.0000j,  0.0000-0.3208j],\n",
            "        [ 0.0000-0.3208j, -0.9471+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7038, 0.7038, 0.7038, 0.7038], requires_grad=True)\n",
            "tensor([[-0.9473+0.0000j,  0.0000-0.3205j],\n",
            "        [ 0.0000-0.3205j, -0.9473+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7040, 0.7040, 0.7040, 0.7040], requires_grad=True)\n",
            "tensor([[-0.9474+0.0000j,  0.0000-0.3200j],\n",
            "        [ 0.0000-0.3200j, -0.9474+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7041, 0.7041, 0.7041, 0.7041], requires_grad=True)\n",
            "tensor([[-0.9476+0.0000j,  0.0000-0.3194j],\n",
            "        [ 0.0000-0.3194j, -0.9476+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7043, 0.7043, 0.7043, 0.7043], requires_grad=True)\n",
            "tensor([[-0.9478+0.0000j,  0.0000-0.3187j],\n",
            "        [ 0.0000-0.3187j, -0.9478+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7045, 0.7045, 0.7045, 0.7045], requires_grad=True)\n",
            "tensor([[-0.9481+0.0000j,  0.0000-0.3180j],\n",
            "        [ 0.0000-0.3180j, -0.9481+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7047, 0.7047, 0.7047, 0.7047], requires_grad=True)\n",
            "tensor([[-0.9484+0.0000j,  0.0000-0.3172j],\n",
            "        [ 0.0000-0.3172j, -0.9484+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7050, 0.7050, 0.7050, 0.7050], requires_grad=True)\n",
            "tensor([[-0.9487+0.0000j,  0.0000-0.3163j],\n",
            "        [ 0.0000-0.3163j, -0.9487+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7052, 0.7052, 0.7052, 0.7052], requires_grad=True)\n",
            "tensor([[-0.9490+0.0000j,  0.0000-0.3153j],\n",
            "        [ 0.0000-0.3153j, -0.9490+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7055, 0.7055, 0.7055, 0.7055], requires_grad=True)\n",
            "tensor([[-0.9493+0.0000j,  0.0000-0.3143j],\n",
            "        [ 0.0000-0.3143j, -0.9493+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7057, 0.7057, 0.7057, 0.7057], requires_grad=True)\n",
            "tensor([[-0.9497+0.0000j,  0.0000-0.3133j],\n",
            "        [ 0.0000-0.3133j, -0.9497+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7060, 0.7060, 0.7060, 0.7060], requires_grad=True)\n",
            "tensor([[-0.9500+0.0000j,  0.0000-0.3123j],\n",
            "        [ 0.0000-0.3123j, -0.9500+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7063, 0.7063, 0.7063, 0.7063], requires_grad=True)\n",
            "tensor([[-0.9503+0.0000j,  0.0000-0.3112j],\n",
            "        [ 0.0000-0.3112j, -0.9503+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7066, 0.7066, 0.7066, 0.7066], requires_grad=True)\n",
            "tensor([[-0.9507+0.0000j,  0.0000-0.3101j],\n",
            "        [ 0.0000-0.3101j, -0.9507+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7068, 0.7068, 0.7068, 0.7068], requires_grad=True)\n",
            "tensor([[-0.9510+0.0000j,  0.0000-0.3091j],\n",
            "        [ 0.0000-0.3091j, -0.9510+0.0000j]], grad_fn=<MmBackward0>)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fdcc725dc10>]"
            ]
          },
          "metadata": {},
          "execution_count": 59
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Since the pulses are generated in an iterative way. The initialization of pulses will influence the number of iterations. It would be great if we can choose a better starting point. Intuitively, if pulses are initialized from a \"close\" or \"similar\" target unitary matrix, we will able to reduce the number of iterations. In the following example, we simply show that the pulses are initialized from previous unitary matrix and it can help achieve convergence faster."
      ],
      "metadata": {
        "id": "rkK0N1VaHS_-"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "theta = 0.5\n",
        "target_unitary = torch.tensor([[np.cos(theta/2), -1j*np.sin(theta/2)], [-1j*np.sin(theta/2), np.cos(theta/2)]], dtype=torch.complex64)\n",
        "optimizer = optim.Adam(params=pulse.parameters(),  lr=5e-3)\n",
        "# We notice that the initial state matters when performing QOC.\n",
        "# Better initialization can save some time.\n",
        "\n",
        "# TODO(jinleic): \n",
        "# add Bloch Sphere here\n",
        "# add figure for pulse time slots (before and after QOC)\n",
        "losses = []\n",
        "\n",
        "for k in range(100):\n",
        "    # loss = (abs(pulse.get_unitary() - target_unitary)**2).sum()\n",
        "    loss = 1 - (torch.trace(pulse.get_unitary() @ target_unitary) / target_unitary.shape[0]).abs() ** 2\n",
        "    losses.append(loss.item())\n",
        "    optimizer.zero_grad()\n",
        "    loss.backward()\n",
        "    optimizer.step()\n",
        "    # print(pulse.pulse_shape.grad)\n",
        "    # print(loss)\n",
        "    print(pulse.pulse_shape)\n",
        "    print(pulse.get_unitary())\n",
        "\n",
        "plt.xlabel(\"Number of Iterations\")\n",
        "plt.ylabel(\"Training Losses\")\n",
        "plt.title(\"Training from Obtained Pulses\")\n",
        "plt.plot(losses[:100])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "zyZDXuUsh1In",
        "outputId": "b8e27765-4c64-4535-e852-bfe6083f2b9c"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Parameter containing:\n",
            "tensor([0.7118, 0.7118, 0.7118, 0.7118], requires_grad=True)\n",
            "tensor([[-0.9570+0.0000j,  0.0000-0.2900j],\n",
            "        [ 0.0000-0.2900j, -0.9570+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7167, 0.7167, 0.7167, 0.7167], requires_grad=True)\n",
            "tensor([[-0.9625+0.0000j,  0.0000-0.2713j],\n",
            "        [ 0.0000-0.2713j, -0.9625+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7213, 0.7213, 0.7213, 0.7213], requires_grad=True)\n",
            "tensor([[-0.9673+0.0000j,  0.0000-0.2537j],\n",
            "        [ 0.0000-0.2537j, -0.9673+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7252, 0.7252, 0.7252, 0.7252], requires_grad=True)\n",
            "tensor([[-0.9712+0.0000j,  0.0000-0.2384j],\n",
            "        [ 0.0000-0.2384j, -0.9712+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7282, 0.7282, 0.7282, 0.7282], requires_grad=True)\n",
            "tensor([[-0.9740+0.0000j,  0.0000-0.2267j],\n",
            "        [ 0.0000-0.2267j, -0.9740+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7301, 0.7301, 0.7301, 0.7301], requires_grad=True)\n",
            "tensor([[-0.9756+0.0000j,  0.0000-0.2194j],\n",
            "        [ 0.0000-0.2194j, -0.9756+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7308, 0.7308, 0.7308, 0.7308], requires_grad=True)\n",
            "tensor([[-0.9763+0.0000j,  0.0000-0.2166j],\n",
            "        [ 0.0000-0.2166j, -0.9763+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7306, 0.7306, 0.7306, 0.7306], requires_grad=True)\n",
            "tensor([[-0.9761+0.0000j,  0.0000-0.2175j],\n",
            "        [ 0.0000-0.2175j, -0.9761+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7296, 0.7296, 0.7296, 0.7296], requires_grad=True)\n",
            "tensor([[-0.9752+0.0000j,  0.0000-0.2212j],\n",
            "        [ 0.0000-0.2212j, -0.9752+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7282, 0.7282, 0.7282, 0.7282], requires_grad=True)\n",
            "tensor([[-0.9739+0.0000j,  0.0000-0.2268j],\n",
            "        [ 0.0000-0.2268j, -0.9739+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7265, 0.7265, 0.7265, 0.7265], requires_grad=True)\n",
            "tensor([[-0.9723+0.0000j,  0.0000-0.2336j],\n",
            "        [ 0.0000-0.2336j, -0.9723+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7246, 0.7246, 0.7246, 0.7246], requires_grad=True)\n",
            "tensor([[-0.9705+0.0000j,  0.0000-0.2409j],\n",
            "        [ 0.0000-0.2409j, -0.9705+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2481j],\n",
            "        [ 0.0000-0.2481j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7211, 0.7211, 0.7211, 0.7211], requires_grad=True)\n",
            "tensor([[-0.9671+0.0000j,  0.0000-0.2545j],\n",
            "        [ 0.0000-0.2545j, -0.9671+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7198, 0.7198, 0.7198, 0.7198], requires_grad=True)\n",
            "tensor([[-0.9657+0.0000j,  0.0000-0.2596j],\n",
            "        [ 0.0000-0.2596j, -0.9657+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7188, 0.7188, 0.7188, 0.7188], requires_grad=True)\n",
            "tensor([[-0.9648+0.0000j,  0.0000-0.2631j],\n",
            "        [ 0.0000-0.2631j, -0.9648+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7184, 0.7184, 0.7184, 0.7184], requires_grad=True)\n",
            "tensor([[-0.9643+0.0000j,  0.0000-0.2648j],\n",
            "        [ 0.0000-0.2648j, -0.9643+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7184, 0.7184, 0.7184, 0.7184], requires_grad=True)\n",
            "tensor([[-0.9643+0.0000j,  0.0000-0.2648j],\n",
            "        [ 0.0000-0.2648j, -0.9643+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7188, 0.7188, 0.7188, 0.7188], requires_grad=True)\n",
            "tensor([[-0.9647+0.0000j,  0.0000-0.2632j],\n",
            "        [ 0.0000-0.2632j, -0.9647+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7196, 0.7196, 0.7196, 0.7196], requires_grad=True)\n",
            "tensor([[-0.9655+0.0000j,  0.0000-0.2603j],\n",
            "        [ 0.0000-0.2603j, -0.9655+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7205, 0.7205, 0.7205, 0.7205], requires_grad=True)\n",
            "tensor([[-0.9665+0.0000j,  0.0000-0.2566j],\n",
            "        [ 0.0000-0.2566j, -0.9665+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7216, 0.7216, 0.7216, 0.7216], requires_grad=True)\n",
            "tensor([[-0.9676+0.0000j,  0.0000-0.2523j],\n",
            "        [ 0.0000-0.2523j, -0.9676+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2480j],\n",
            "        [ 0.0000-0.2480j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7238, 0.7238, 0.7238, 0.7238], requires_grad=True)\n",
            "tensor([[-0.9698+0.0000j,  0.0000-0.2440j],\n",
            "        [ 0.0000-0.2440j, -0.9698+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7246, 0.7246, 0.7246, 0.7246], requires_grad=True)\n",
            "tensor([[-0.9706+0.0000j,  0.0000-0.2407j],\n",
            "        [ 0.0000-0.2407j, -0.9706+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7252, 0.7252, 0.7252, 0.7252], requires_grad=True)\n",
            "tensor([[-0.9712+0.0000j,  0.0000-0.2383j],\n",
            "        [ 0.0000-0.2383j, -0.9712+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7256, 0.7256, 0.7256, 0.7256], requires_grad=True)\n",
            "tensor([[-0.9715+0.0000j,  0.0000-0.2370j],\n",
            "        [ 0.0000-0.2370j, -0.9715+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7256, 0.7256, 0.7256, 0.7256], requires_grad=True)\n",
            "tensor([[-0.9715+0.0000j,  0.0000-0.2369j],\n",
            "        [ 0.0000-0.2369j, -0.9715+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7254, 0.7254, 0.7254, 0.7254], requires_grad=True)\n",
            "tensor([[-0.9713+0.0000j,  0.0000-0.2378j],\n",
            "        [ 0.0000-0.2378j, -0.9713+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7249, 0.7249, 0.7249, 0.7249], requires_grad=True)\n",
            "tensor([[-0.9709+0.0000j,  0.0000-0.2395j],\n",
            "        [ 0.0000-0.2395j, -0.9709+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7243, 0.7243, 0.7243, 0.7243], requires_grad=True)\n",
            "tensor([[-0.9703+0.0000j,  0.0000-0.2419j],\n",
            "        [ 0.0000-0.2419j, -0.9703+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7236, 0.7236, 0.7236, 0.7236], requires_grad=True)\n",
            "tensor([[-0.9696+0.0000j,  0.0000-0.2446j],\n",
            "        [ 0.0000-0.2446j, -0.9696+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2473j],\n",
            "        [ 0.0000-0.2473j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7223, 0.7223, 0.7223, 0.7223], requires_grad=True)\n",
            "tensor([[-0.9683+0.0000j,  0.0000-0.2499j],\n",
            "        [ 0.0000-0.2499j, -0.9683+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7217, 0.7217, 0.7217, 0.7217], requires_grad=True)\n",
            "tensor([[-0.9678+0.0000j,  0.0000-0.2519j],\n",
            "        [ 0.0000-0.2519j, -0.9678+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7214, 0.7214, 0.7214, 0.7214], requires_grad=True)\n",
            "tensor([[-0.9674+0.0000j,  0.0000-0.2533j],\n",
            "        [ 0.0000-0.2533j, -0.9674+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7212, 0.7212, 0.7212, 0.7212], requires_grad=True)\n",
            "tensor([[-0.9672+0.0000j,  0.0000-0.2539j],\n",
            "        [ 0.0000-0.2539j, -0.9672+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7213, 0.7213, 0.7213, 0.7213], requires_grad=True)\n",
            "tensor([[-0.9673+0.0000j,  0.0000-0.2538j],\n",
            "        [ 0.0000-0.2538j, -0.9673+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7215, 0.7215, 0.7215, 0.7215], requires_grad=True)\n",
            "tensor([[-0.9675+0.0000j,  0.0000-0.2530j],\n",
            "        [ 0.0000-0.2530j, -0.9675+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7218, 0.7218, 0.7218, 0.7218], requires_grad=True)\n",
            "tensor([[-0.9678+0.0000j,  0.0000-0.2516j],\n",
            "        [ 0.0000-0.2516j, -0.9678+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7222, 0.7222, 0.7222, 0.7222], requires_grad=True)\n",
            "tensor([[-0.9683+0.0000j,  0.0000-0.2499j],\n",
            "        [ 0.0000-0.2499j, -0.9683+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2481j],\n",
            "        [ 0.0000-0.2481j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7232, 0.7232, 0.7232, 0.7232], requires_grad=True)\n",
            "tensor([[-0.9692+0.0000j,  0.0000-0.2464j],\n",
            "        [ 0.0000-0.2464j, -0.9692+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7235, 0.7235, 0.7235, 0.7235], requires_grad=True)\n",
            "tensor([[-0.9695+0.0000j,  0.0000-0.2449j],\n",
            "        [ 0.0000-0.2449j, -0.9695+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7238, 0.7238, 0.7238, 0.7238], requires_grad=True)\n",
            "tensor([[-0.9698+0.0000j,  0.0000-0.2439j],\n",
            "        [ 0.0000-0.2439j, -0.9698+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7239, 0.7239, 0.7239, 0.7239], requires_grad=True)\n",
            "tensor([[-0.9699+0.0000j,  0.0000-0.2433j],\n",
            "        [ 0.0000-0.2433j, -0.9699+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7239, 0.7239, 0.7239, 0.7239], requires_grad=True)\n",
            "tensor([[-0.9699+0.0000j,  0.0000-0.2433j],\n",
            "        [ 0.0000-0.2433j, -0.9699+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7238, 0.7238, 0.7238, 0.7238], requires_grad=True)\n",
            "tensor([[-0.9698+0.0000j,  0.0000-0.2438j],\n",
            "        [ 0.0000-0.2438j, -0.9698+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7236, 0.7236, 0.7236, 0.7236], requires_grad=True)\n",
            "tensor([[-0.9696+0.0000j,  0.0000-0.2447j],\n",
            "        [ 0.0000-0.2447j, -0.9696+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7233, 0.7233, 0.7233, 0.7233], requires_grad=True)\n",
            "tensor([[-0.9693+0.0000j,  0.0000-0.2458j],\n",
            "        [ 0.0000-0.2458j, -0.9693+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2470j],\n",
            "        [ 0.0000-0.2470j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2482j],\n",
            "        [ 0.0000-0.2482j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7225, 0.7225, 0.7225, 0.7225], requires_grad=True)\n",
            "tensor([[-0.9685+0.0000j,  0.0000-0.2491j],\n",
            "        [ 0.0000-0.2491j, -0.9685+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7223, 0.7223, 0.7223, 0.7223], requires_grad=True)\n",
            "tensor([[-0.9683+0.0000j,  0.0000-0.2498j],\n",
            "        [ 0.0000-0.2498j, -0.9683+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7222, 0.7222, 0.7222, 0.7222], requires_grad=True)\n",
            "tensor([[-0.9682+0.0000j,  0.0000-0.2500j],\n",
            "        [ 0.0000-0.2500j, -0.9682+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7222, 0.7222, 0.7222, 0.7222], requires_grad=True)\n",
            "tensor([[-0.9683+0.0000j,  0.0000-0.2500j],\n",
            "        [ 0.0000-0.2500j, -0.9683+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7223, 0.7223, 0.7223, 0.7223], requires_grad=True)\n",
            "tensor([[-0.9684+0.0000j,  0.0000-0.2496j],\n",
            "        [ 0.0000-0.2496j, -0.9684+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7225, 0.7225, 0.7225, 0.7225], requires_grad=True)\n",
            "tensor([[-0.9685+0.0000j,  0.0000-0.2489j],\n",
            "        [ 0.0000-0.2489j, -0.9685+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2481j],\n",
            "        [ 0.0000-0.2481j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2473j],\n",
            "        [ 0.0000-0.2473j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7231, 0.7231, 0.7231, 0.7231], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2466j],\n",
            "        [ 0.0000-0.2466j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7232, 0.7232, 0.7232, 0.7232], requires_grad=True)\n",
            "tensor([[-0.9693+0.0000j,  0.0000-0.2461j],\n",
            "        [ 0.0000-0.2461j, -0.9693+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7233, 0.7233, 0.7233, 0.7233], requires_grad=True)\n",
            "tensor([[-0.9693+0.0000j,  0.0000-0.2457j],\n",
            "        [ 0.0000-0.2457j, -0.9693+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7233, 0.7233, 0.7233, 0.7233], requires_grad=True)\n",
            "tensor([[-0.9694+0.0000j,  0.0000-0.2457j],\n",
            "        [ 0.0000-0.2457j, -0.9694+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7233, 0.7233, 0.7233, 0.7233], requires_grad=True)\n",
            "tensor([[-0.9693+0.0000j,  0.0000-0.2459j],\n",
            "        [ 0.0000-0.2459j, -0.9693+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7232, 0.7232, 0.7232, 0.7232], requires_grad=True)\n",
            "tensor([[-0.9692+0.0000j,  0.0000-0.2462j],\n",
            "        [ 0.0000-0.2462j, -0.9692+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7231, 0.7231, 0.7231, 0.7231], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2467j],\n",
            "        [ 0.0000-0.2467j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2473j],\n",
            "        [ 0.0000-0.2473j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2478j],\n",
            "        [ 0.0000-0.2478j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2482j],\n",
            "        [ 0.0000-0.2482j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7226, 0.7226, 0.7226, 0.7226], requires_grad=True)\n",
            "tensor([[-0.9686+0.0000j,  0.0000-0.2485j],\n",
            "        [ 0.0000-0.2485j, -0.9686+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7226, 0.7226, 0.7226, 0.7226], requires_grad=True)\n",
            "tensor([[-0.9686+0.0000j,  0.0000-0.2486j],\n",
            "        [ 0.0000-0.2486j, -0.9686+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7226, 0.7226, 0.7226, 0.7226], requires_grad=True)\n",
            "tensor([[-0.9686+0.0000j,  0.0000-0.2484j],\n",
            "        [ 0.0000-0.2484j, -0.9686+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7227, 0.7227, 0.7227, 0.7227], requires_grad=True)\n",
            "tensor([[-0.9687+0.0000j,  0.0000-0.2482j],\n",
            "        [ 0.0000-0.2482j, -0.9687+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2479j],\n",
            "        [ 0.0000-0.2479j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2475j],\n",
            "        [ 0.0000-0.2475j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2471j],\n",
            "        [ 0.0000-0.2471j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2468j],\n",
            "        [ 0.0000-0.2468j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7231, 0.7231, 0.7231, 0.7231], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2467j],\n",
            "        [ 0.0000-0.2467j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7231, 0.7231, 0.7231, 0.7231], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2466j],\n",
            "        [ 0.0000-0.2466j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7231, 0.7231, 0.7231, 0.7231], requires_grad=True)\n",
            "tensor([[-0.9691+0.0000j,  0.0000-0.2467j],\n",
            "        [ 0.0000-0.2467j, -0.9691+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2469j],\n",
            "        [ 0.0000-0.2469j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2471j],\n",
            "        [ 0.0000-0.2471j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2474j],\n",
            "        [ 0.0000-0.2474j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2476j],\n",
            "        [ 0.0000-0.2476j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2478j],\n",
            "        [ 0.0000-0.2478j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2479j],\n",
            "        [ 0.0000-0.2479j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2479j],\n",
            "        [ 0.0000-0.2479j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2478j],\n",
            "        [ 0.0000-0.2478j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7228, 0.7228, 0.7228, 0.7228], requires_grad=True)\n",
            "tensor([[-0.9688+0.0000j,  0.0000-0.2477j],\n",
            "        [ 0.0000-0.2477j, -0.9688+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2475j],\n",
            "        [ 0.0000-0.2475j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2473j],\n",
            "        [ 0.0000-0.2473j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2472j],\n",
            "        [ 0.0000-0.2472j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2471j],\n",
            "        [ 0.0000-0.2471j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2471j],\n",
            "        [ 0.0000-0.2471j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2471j],\n",
            "        [ 0.0000-0.2471j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7230, 0.7230, 0.7230, 0.7230], requires_grad=True)\n",
            "tensor([[-0.9690+0.0000j,  0.0000-0.2472j],\n",
            "        [ 0.0000-0.2472j, -0.9690+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2473j],\n",
            "        [ 0.0000-0.2473j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2474j],\n",
            "        [ 0.0000-0.2474j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n",
            "Parameter containing:\n",
            "tensor([0.7229, 0.7229, 0.7229, 0.7229], requires_grad=True)\n",
            "tensor([[-0.9689+0.0000j,  0.0000-0.2475j],\n",
            "        [ 0.0000-0.2475j, -0.9689+0.0000j]], grad_fn=<MmBackward0>)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fdcc3522e50>]"
            ]
          },
          "metadata": {},
          "execution_count": 60
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "theta = 0.6\n",
        "target_unitary = torch.tensor(\n",
        "    [[1, 0, 0, 0],\n",
        "      [0, 1, 0, 0],\n",
        "      [0, 0, np.cos(theta/2), -1j*np.sin(theta/2)],\n",
        "      [0, 0, -1j*np.sin(theta/2), np.cos(theta/2)],\n",
        "      ], dtype=torch.complex64)\n",
        "\n",
        "pulse_q0 = tq.QuantumPulseDirect(n_steps=10,\n",
        "                                  hamil=[[0, 1], [1, 0]])\n",
        "pulse_q1 = tq.QuantumPulseDirect(n_steps=10,\n",
        "                                  hamil=[[0, 1], [1, 0]])\n",
        "pulse_q01 = tq.QuantumPulseDirect(n_steps=10,\n",
        "                                  hamil=[[1, 0, 0, 0],\n",
        "                                          [0, 1, 0, 0],\n",
        "                                          [0, 0, 0, 1],\n",
        "                                          [0, 0, 1, 0],\n",
        "                                          ]\n",
        "                                  )\n",
        "\n",
        "optimizer = optim.Adam(params=list(pulse_q0.parameters()) + list(pulse_q1.parameters()) + list(pulse_q01.parameters()), lr=5e-3)\n",
        "\n",
        "losses = []\n",
        "\n",
        "for k in range(100):\n",
        "    u_0 = pulse_q0.get_unitary()\n",
        "    u_1 = pulse_q1.get_unitary()\n",
        "    u_01 = pulse_q01.get_unitary()\n",
        "    # overall_u = u_01\n",
        "    overall_u = torch.kron(u_0, u_1) @ u_01\n",
        "    # loss = (abs(pulse.get_unitary() - target_unitary)**2).sum()\n",
        "    loss = 1 - (torch.trace(overall_u @ target_unitary) / target_unitary.shape[0]).abs() ** 2\n",
        "    losses.append(loss.item())\n",
        "    optimizer.zero_grad()\n",
        "    loss.backward()\n",
        "    optimizer.step()\n",
        "    # print(pulse.pulse_shape.grad)\n",
        "    print(loss)\n",
        "    # print(pulse.pulse_shape)\n",
        "    # print(pulse.get_unitary())\n",
        "    print(overall_u)\n",
        "\n",
        "plt.xlabel(\"Number of Iterations\")\n",
        "plt.ylabel(\"Training Losses\")\n",
        "plt.title(\"Training from Default Initialization\")\n",
        "plt.plot(losses[:100])\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "TL7_X8n5h04g",
        "outputId": "1ee365cf-73d3-4eee-e4f3-698d1a642b95"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "tensor(0.8438, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.5907+0.3830j,  0.2483+0.3830j,  0.0000+0.2220j,  0.4967+0.0000j],\n",
            "        [ 0.2483+0.3830j, -0.5907+0.3830j,  0.4967+0.0000j,  0.0000+0.2220j],\n",
            "        [ 0.2483+0.3830j,  0.2483-0.1610j, -0.3424+0.0000j,  0.0000+0.7660j],\n",
            "        [ 0.2483-0.1610j,  0.2483+0.3830j,  0.0000+0.7660j, -0.3424+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.7897, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.6477+0.3753j,  0.2175+0.3753j,  0.0000+0.2493j,  0.4350+0.0000j],\n",
            "        [ 0.2175+0.3753j, -0.6477+0.3753j,  0.4350+0.0000j,  0.0000+0.2493j],\n",
            "        [ 0.2175+0.3753j,  0.2175-0.1261j, -0.4302+0.0000j,  0.0000+0.7507j],\n",
            "        [ 0.2175-0.1261j,  0.2175+0.3753j,  0.0000+0.7507j, -0.4302+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.7257, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.7031+0.3618j,  0.1861+0.3617j,  0.0000+0.2660j,  0.3723+0.0000j],\n",
            "        [ 0.1861+0.3617j, -0.7031+0.3618j,  0.3723+0.0000j,  0.0000+0.2660j],\n",
            "        [ 0.1861+0.3617j,  0.1861-0.0958j, -0.5169+0.0000j,  0.0000+0.7235j],\n",
            "        [ 0.1861-0.0958j,  0.1861+0.3617j,  0.0000+0.7235j, -0.5169+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.6526, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.7560+0.3424j,  0.1550+0.3422j,  0.0000+0.2721j,  0.3099+0.0000j],\n",
            "        [ 0.1550+0.3422j, -0.7560+0.3424j,  0.3099+0.0000j,  0.0000+0.2721j],\n",
            "        [ 0.1550+0.3422j,  0.1549-0.0701j, -0.6011+0.0000j,  0.0000+0.6846j],\n",
            "        [ 0.1549-0.0701j,  0.1550+0.3422j,  0.0000+0.6846j, -0.6011+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.5722, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.8058+0.3173j,  0.1248+0.3169j,  0.0000+0.2679j,  0.2495+0.0000j],\n",
            "        [ 0.1248+0.3169j, -0.8058+0.3173j,  0.2495+0.0000j,  0.0000+0.2679j],\n",
            "        [ 0.1248+0.3170j,  0.1247-0.0491j, -0.6810+0.0000j,  0.0000+0.6342j],\n",
            "        [ 0.1247-0.0491j,  0.1248+0.3170j,  0.0000+0.6342j, -0.6810+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.4868, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.8516+0.2866j,  0.0963+0.2862j,  0.0000+0.2539j,  0.1925+0.0000j],\n",
            "        [ 0.0963+0.2862j, -0.8516+0.2866j,  0.1925+0.0000j,  0.0000+0.2539j],\n",
            "        [ 0.0963+0.2863j,  0.0962-0.0324j, -0.7552+0.0000j,  0.0000+0.5728j],\n",
            "        [ 0.0962-0.0324j,  0.0963+0.2863j,  0.0000+0.5728j, -0.7552+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.3992, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.8925+0.2508j,  0.0704+0.2503j,  0.0000+0.2307j,  0.1406+0.0000j],\n",
            "        [ 0.0704+0.2503j, -0.8925+0.2508j,  0.1406+0.0000j,  0.0000+0.2307j],\n",
            "        [ 0.0704+0.2504j,  0.0702-0.0197j, -0.8221+0.0000j,  0.0000+0.5012j],\n",
            "        [ 0.0702-0.0197j,  0.0704+0.2504j,  0.0000+0.5012j, -0.8221+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.3131, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9277+0.2104j,  0.0476+0.2100j,  0.0000+0.1993j,  0.0952+0.0000j],\n",
            "        [ 0.0476+0.2100j, -0.9277+0.2104j,  0.0952+0.0000j,  0.0000+0.1993j],\n",
            "        [ 0.0476+0.2101j,  0.0475-0.0108j, -0.8801+0.0000j,  0.0000+0.4204j],\n",
            "        [ 0.0475-0.0108j,  0.0476+0.2101j,  0.0000+0.4204j, -0.8801+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.2321, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9565+0.1660j,  0.0288+0.1658j,  0.0000+0.1611j,  0.0576+0.0000j],\n",
            "        [ 0.0288+0.1658j, -0.9565+0.1660j,  0.0576+0.0000j,  0.0000+0.1611j],\n",
            "        [ 0.0288+0.1661j,  0.0288-0.0050j, -0.9277+0.0000j,  0.0000+0.3319j],\n",
            "        [ 0.0288-0.0050j,  0.0288+0.1661j,  0.0000+0.3319j, -0.9277+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.1604, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9782+0.1187j,  0.0144+0.1189j,  0.0000+0.1177j,  0.0290+0.0000j],\n",
            "        [ 0.0144+0.1189j, -0.9782+0.1187j,  0.0290+0.0000j,  0.0000+0.1177j],\n",
            "        [ 0.0145+0.1195j,  0.0145-0.0018j, -0.9638+0.0000j,  0.0000+0.2375j],\n",
            "        [ 0.0145-0.0018j,  0.0145+0.1195j,  0.0000+0.2375j, -0.9638+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.1014, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9925+0.0694j,  0.0049+0.0703j,  0.0000+0.0715j,  0.0101+0.0000j],\n",
            "        [ 0.0049+0.0703j, -0.9925+0.0694j,  0.0101+0.0000j,  0.0000+0.0715j],\n",
            "        [ 0.0050+0.0719j,  0.0051-0.0004j, -0.9876+0.0000j,  0.0000+0.1397j],\n",
            "        [ 0.0051-0.0004j,  0.0050+0.0719j,  0.0000+0.1397j, -0.9876+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0577, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9926e-01+1.9636e-02j,  4.2157e-04+2.1453e-02j,\n",
            "          0.0000e+00+2.5184e-02j,  1.0360e-03+0.0000e+00j],\n",
            "        [ 4.2157e-04+2.1453e-02j, -9.9926e-01+1.9636e-02j,\n",
            "          1.0360e-03+0.0000e+00j,  0.0000e+00+2.5184e-02j],\n",
            "        [ 4.9509e-04+2.5194e-02j,  5.4090e-04-1.0629e-05j,\n",
            "         -9.9884e-01+0.0000e+00j,  0.0000e+00+4.1089e-02j],\n",
            "        [ 5.4090e-04-1.0629e-05j,  4.9509e-04+2.5194e-02j,\n",
            "          0.0000e+00+4.1089e-02j, -9.9884e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0304, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9907e-01-2.9175e-02j,  7.6065e-04-2.6047e-02j,\n",
            "          0.0000e+00-1.8290e-02j,  1.0118e-03+0.0000e+00j],\n",
            "        [ 7.6065e-04-2.6047e-02j, -9.9907e-01-2.9175e-02j,\n",
            "          1.0118e-03+0.0000e+00j,  0.0000e+00-1.8290e-02j],\n",
            "        [ 5.3453e-04-1.8304e-02j,  4.7723e-04+1.3936e-05j,\n",
            "         -9.9831e-01+0.0000e+00j,  0.0000e+00-5.5223e-02j],\n",
            "        [ 4.7723e-04+1.3936e-05j,  5.3453e-04-1.8304e-02j,\n",
            "          0.0000e+00-5.5223e-02j, -9.9831e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0187, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9930-0.0755j,  0.0054-0.0707j,  0.0000-0.0560j,  0.0083+0.0000j],\n",
            "        [ 0.0054-0.0707j, -0.9930-0.0755j,  0.0083+0.0000j,  0.0000-0.0560j],\n",
            "        [ 0.0043-0.0563j,  0.0040+0.0003j, -0.9876+0.0000j,  0.0000-0.1462j],\n",
            "        [ 0.0040+0.0003j,  0.0043-0.0563j,  0.0000-0.1462j, -0.9876+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0198, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9828-0.1181j,  0.0133-0.1111j,  0.0000-0.0856j,  0.0202+0.0000j],\n",
            "        [ 0.0133-0.1111j, -0.9828-0.1181j,  0.0202+0.0000j,  0.0000-0.0856j],\n",
            "        [ 0.0104-0.0867j,  0.0098+0.0012j, -0.9694+0.0000j,  0.0000-0.2292j],\n",
            "        [ 0.0098+0.0012j,  0.0104-0.0867j,  0.0000-0.2292j, -0.9694+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0296, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9703-0.1557j,  0.0235-0.1463j,  0.0000-0.1061j,  0.0338+0.0000j],\n",
            "        [ 0.0235-0.1463j, -0.9703-0.1557j,  0.0338+0.0000j,  0.0000-0.1061j],\n",
            "        [ 0.0174-0.1087j,  0.0164+0.0026j, -0.9468+0.0000j,  0.0000-0.3021j],\n",
            "        [ 0.0164+0.0026j,  0.0174-0.1087j,  0.0000-0.3021j, -0.9468+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0439, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9574-0.1879j,  0.0345-0.1757j,  0.0000-0.1177j,  0.0464+0.0000j],\n",
            "        [ 0.0345-0.1757j, -0.9574-0.1879j,  0.0464+0.0000j,  0.0000-0.1177j],\n",
            "        [ 0.0240-0.1221j,  0.0224+0.0044j, -0.9229+0.0000j,  0.0000-0.3636j],\n",
            "        [ 0.0224+0.0044j,  0.0240-0.1221j,  0.0000-0.3636j, -0.9229+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0588, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9458-0.2144j,  0.0451-0.1990j,  0.0000-0.1216j,  0.0558+0.0000j],\n",
            "        [ 0.0451-0.1990j, -0.9458-0.2144j,  0.0558+0.0000j,  0.0000-0.1216j],\n",
            "        [ 0.0289-0.1277j,  0.0269+0.0061j, -0.9007+0.0000j,  0.0000-0.4133j],\n",
            "        [ 0.0269+0.0061j,  0.0289-0.1277j,  0.0000-0.4133j, -0.9007+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0716, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9365-0.2351j,  0.0543-0.2163j,  0.0000-0.1195j,  0.0611+0.0000j],\n",
            "        [ 0.0543-0.2163j, -0.9365-0.2351j,  0.0611+0.0000j,  0.0000-0.1195j],\n",
            "        [ 0.0318-0.1268j,  0.0293+0.0074j, -0.8822+0.0000j,  0.0000-0.4514j],\n",
            "        [ 0.0293+0.0074j,  0.0318-0.1268j,  0.0000-0.4514j, -0.8822+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0805, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9301-0.2502j,  0.0613-0.2280j,  0.0000-0.1127j,  0.0620+0.0000j],\n",
            "        [ 0.0613-0.2280j, -0.9301-0.2502j,  0.0620+0.0000j,  0.0000-0.1127j],\n",
            "        [ 0.0325-0.1206j,  0.0296+0.0080j, -0.8688+0.0000j,  0.0000-0.4782j],\n",
            "        [ 0.0296+0.0080j,  0.0325-0.1206j,  0.0000-0.4782j, -0.8688+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0847, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9269-0.2602j,  0.0658-0.2344j,  0.0000-0.1024j,  0.0588+0.0000j],\n",
            "        [ 0.0658-0.2344j, -0.9269-0.2602j,  0.0588+0.0000j,  0.0000-0.1024j],\n",
            "        [ 0.0310-0.1103j,  0.0279+0.0078j, -0.8611+0.0000j,  0.0000-0.4946j],\n",
            "        [ 0.0279+0.0078j,  0.0310-0.1103j,  0.0000-0.4946j, -0.8611+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0843, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9266-0.2653j,  0.0676-0.2361j,  0.0000-0.0896j,  0.0523+0.0000j],\n",
            "        [ 0.0676-0.2361j, -0.9266-0.2653j,  0.0523+0.0000j,  0.0000-0.0896j],\n",
            "        [ 0.0277-0.0967j,  0.0246+0.0071j, -0.8590+0.0000j,  0.0000-0.5014j],\n",
            "        [ 0.0246+0.0071j,  0.0277-0.0967j,  0.0000-0.5014j, -0.8590+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0798, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9289-0.2660j,  0.0668-0.2334j,  0.0000-0.0748j,  0.0433+0.0000j],\n",
            "        [ 0.0668-0.2334j, -0.9289-0.2660j,  0.0433+0.0000j,  0.0000-0.0748j],\n",
            "        [ 0.0231-0.0806j,  0.0203+0.0058j, -0.8620+0.0000j,  0.0000-0.4994j],\n",
            "        [ 0.0203+0.0058j,  0.0231-0.0806j,  0.0000-0.4994j, -0.8620+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0721, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9333-0.2627j,  0.0638-0.2267j,  0.0000-0.0585j,  0.0329+0.0000j],\n",
            "        [ 0.0638-0.2267j, -0.9333-0.2627j,  0.0329+0.0000j,  0.0000-0.0585j],\n",
            "        [ 0.0177-0.0628j,  0.0153+0.0043j, -0.8694+0.0000j,  0.0000-0.4895j],\n",
            "        [ 0.0153+0.0043j,  0.0177-0.0628j,  0.0000-0.4895j, -0.8694+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0625, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9391-0.2558j,  0.0590-0.2166j,  0.0000-0.0412j,  0.0221+0.0000j],\n",
            "        [ 0.0590-0.2166j, -0.9391-0.2558j,  0.0221+0.0000j,  0.0000-0.0412j],\n",
            "        [ 0.0120-0.0440j,  0.0101+0.0028j, -0.8801+0.0000j,  0.0000-0.4724j],\n",
            "        [ 0.0101+0.0028j,  0.0120-0.0440j,  0.0000-0.4724j, -0.8801+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0519, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9459-0.2457j,  0.0529-0.2035j,  0.0000-0.0234j,  0.0118+0.0000j],\n",
            "        [ 0.0529-0.2035j, -0.9459-0.2457j,  0.0118+0.0000j,  0.0000-0.0234j],\n",
            "        [ 0.0064-0.0248j,  0.0053+0.0014j, -0.8930+0.0000j,  0.0000-0.4492j],\n",
            "        [ 0.0053+0.0014j,  0.0064-0.0248j,  0.0000-0.4492j, -0.8930+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0416, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9530-2.3294e-01j,  0.0459-1.8789e-01j,  0.0000-5.6513e-03j,\n",
            "          0.0026+0.0000e+00j],\n",
            "        [ 0.0459-1.8789e-01j, -0.9530-2.3294e-01j,  0.0026+0.0000e+00j,\n",
            "          0.0000-5.6513e-03j],\n",
            "        [ 0.0015-5.9374e-03j,  0.0012+2.8610e-04j, -0.9071+0.0000e+00j,\n",
            "          0.0000-4.2083e-01j],\n",
            "        [ 0.0012+2.8610e-04j,  0.0015-5.9374e-03j,  0.0000-4.2083e-01j,\n",
            "         -0.9071+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0325, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9601-0.2181j,  0.0387-0.1703j,  0.0000+0.0113j, -0.0047+0.0000j],\n",
            "        [ 0.0387-0.1703j, -0.9601-0.2181j, -0.0047+0.0000j,  0.0000+0.0113j],\n",
            "        [-0.0027+0.0117j, -0.0021-0.0005j, -0.9214+0.0000j,  0.0000-0.3884j],\n",
            "        [-0.0021-0.0005j, -0.0027+0.0117j,  0.0000-0.3884j, -0.9214+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0250, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9667-0.2017j,  0.0316-0.1514j,  0.0000+0.0266j, -0.0101+0.0000j],\n",
            "        [ 0.0316-0.1514j, -0.9667-0.2017j, -0.0101+0.0000j,  0.0000+0.0266j],\n",
            "        [-0.0057+0.0275j, -0.0043-0.0009j, -0.9351+0.0000j,  0.0000-0.3532j],\n",
            "        [-0.0043-0.0009j, -0.0057+0.0275j,  0.0000-0.3532j, -0.9351+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0197, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9727-0.1846j,  0.0250-0.1318j,  0.0000+0.0397j, -0.0132+0.0000j],\n",
            "        [ 0.0250-0.1318j, -0.9727-0.1846j, -0.0132+0.0000j,  0.0000+0.0397j],\n",
            "        [-0.0077+0.0407j, -0.0055-0.0010j, -0.9477+0.0000j,  0.0000-0.3164j],\n",
            "        [-0.0055-0.0010j, -0.0077+0.0407j,  0.0000-0.3164j, -0.9477+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0164, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9780-0.1672j,  0.0192-0.1121j,  0.0000+0.0499j, -0.0145+0.0000j],\n",
            "        [ 0.0192-0.1121j, -0.9780-0.1672j, -0.0145+0.0000j,  0.0000+0.0499j],\n",
            "        [-0.0087+0.0509j, -0.0058-0.0010j, -0.9588+0.0000j,  0.0000-0.2793j],\n",
            "        [-0.0058-0.0010j, -0.0087+0.0509j,  0.0000-0.2793j, -0.9588+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0150, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9824-0.1504j,  0.0142-0.0929j,  0.0000+0.0568j, -0.0143+0.0000j],\n",
            "        [ 0.0142-0.0929j, -0.9824-0.1504j, -0.0143+0.0000j,  0.0000+0.0568j],\n",
            "        [-0.0088+0.0577j, -0.0055-0.0008j, -0.9682+0.0000j,  0.0000-0.2433j],\n",
            "        [-0.0055-0.0008j, -0.0088+0.0577j,  0.0000-0.2433j, -0.9682+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0151, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9861-0.1346j,  0.0102-0.0749j,  0.0000+0.0603j, -0.0130+0.0000j],\n",
            "        [ 0.0102-0.0749j, -0.9861-0.1346j, -0.0130+0.0000j,  0.0000+0.0603j],\n",
            "        [-0.0083+0.0610j, -0.0046-0.0006j, -0.9759+0.0000j,  0.0000-0.2095j],\n",
            "        [-0.0046-0.0006j, -0.0083+0.0610j,  0.0000-0.2095j, -0.9759+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0162, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9891-0.1204j,  0.0071-0.0585j,  0.0000+0.0605j, -0.0110+0.0000j],\n",
            "        [ 0.0071-0.0585j, -0.9891-0.1204j, -0.0110+0.0000j,  0.0000+0.0605j],\n",
            "        [-0.0074+0.0609j, -0.0036-0.0004j, -0.9819+0.0000j,  0.0000-0.1790j],\n",
            "        [-0.0036-0.0004j, -0.0074+0.0609j,  0.0000-0.1790j, -0.9819+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0179, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9914-0.1083j,  0.0048-0.0442j,  0.0000+0.0574j, -0.0089+0.0000j],\n",
            "        [ 0.0048-0.0442j, -0.9914-0.1083j, -0.0089+0.0000j,  0.0000+0.0574j],\n",
            "        [-0.0063+0.0577j, -0.0026-0.0003j, -0.9866+0.0000j,  0.0000-0.1526j],\n",
            "        [-0.0026-0.0003j, -0.0063+0.0577j,  0.0000-0.1526j, -0.9866+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0197, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9932-0.0986j,  0.0032-0.0324j,  0.0000+0.0517j, -0.0068+0.0000j],\n",
            "        [ 0.0032-0.0324j, -0.9932-0.0986j, -0.0068+0.0000j,  0.0000+0.0517j],\n",
            "        [-0.0051+0.0519j, -0.0017-0.0002j, -0.9900+0.0000j,  0.0000-0.1310j],\n",
            "        [-0.0017-0.0002j, -0.0051+0.0519j,  0.0000-0.1310j, -0.9900+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0212, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9946-9.1446e-02j,  0.0021-2.3124e-02j,  0.0000+4.3808e-02j,\n",
            "         -0.0051+0.0000e+00j],\n",
            "        [ 0.0021-2.3124e-02j, -0.9946-9.1446e-02j, -0.0051+0.0000e+00j,\n",
            "          0.0000+4.3808e-02j],\n",
            "        [-0.0040+4.3902e-02j, -0.0010-9.3855e-05j, -0.9924+0.0000e+00j,\n",
            "          0.0000-1.1457e-01j],\n",
            "        [-0.0010-9.3855e-05j, -0.0040+4.3902e-02j,  0.0000-1.1457e-01j,\n",
            "         -0.9924+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0222, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9547e-01-8.6981e-02j,  1.4525e-03-1.6623e-02j,\n",
            "          0.0000e+00+3.4336e-02j, -3.5788e-03+0.0000e+00j],\n",
            "        [ 1.4525e-03-1.6623e-02j, -9.9547e-01-8.6981e-02j,\n",
            "         -3.5788e-03+0.0000e+00j,  0.0000e+00+3.4336e-02j],\n",
            "        [-3.0045e-03+3.4386e-02j, -5.7420e-04-5.0172e-05j,\n",
            "         -9.9402e-01+0.0000e+00j,  0.0000e+00-1.0360e-01j],\n",
            "        [-5.7420e-04-5.0172e-05j, -3.0045e-03+3.4386e-02j,\n",
            "          0.0000e+00-1.0360e-01j, -9.9402e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0226, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9599e-01-8.5175e-02j,  1.0987e-03-1.2848e-02j,\n",
            "          0.0000e+00+2.3915e-02j, -2.3563e-03+0.0000e+00j],\n",
            "        [ 1.0987e-03-1.2848e-02j, -9.9599e-01-8.5175e-02j,\n",
            "         -2.3563e-03+0.0000e+00j,  0.0000e+00+2.3915e-02j],\n",
            "        [-2.0474e-03+2.3942e-02j, -3.0884e-04-2.6411e-05j,\n",
            "         -9.9489e-01+0.0000e+00j,  0.0000e+00-9.8023e-02j],\n",
            "        [-3.0884e-04-2.6411e-05j, -2.0474e-03+2.3942e-02j,\n",
            "          0.0000e+00-9.8023e-02j, -9.9489e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0223, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9614e-01-8.5903e-02j,  1.0081e-03-1.1690e-02j,\n",
            "          0.0000e+00+1.3168e-02j, -1.2914e-03+0.0000e+00j],\n",
            "        [ 1.0081e-03-1.1690e-02j, -9.9614e-01-8.5903e-02j,\n",
            "         -1.2914e-03+0.0000e+00j,  0.0000e+00+1.3168e-02j],\n",
            "        [-1.1367e-03+1.3182e-02j, -1.5469e-04-1.3340e-05j,\n",
            "         -9.9514e-01+0.0000e+00j,  0.0000e+00-9.7592e-02j],\n",
            "        [-1.5469e-04-1.3340e-05j, -1.1367e-03+1.3182e-02j,\n",
            "          0.0000e+00-9.7592e-02j, -9.9514e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0215, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9595e-01-8.8953e-02j,  1.1566e-03-1.2950e-02j,\n",
            "          0.0000e+00+2.6917e-03j, -2.7573e-04+0.0000e+00j],\n",
            "        [ 1.1566e-03-1.2950e-02j, -9.9595e-01-8.8953e-02j,\n",
            "         -2.7573e-04+0.0000e+00j,  0.0000e+00+2.6917e-03j],\n",
            "        [-2.4069e-04+2.6949e-03j, -3.5040e-05-3.1296e-06j,\n",
            "         -9.9479e-01+0.0000e+00j,  0.0000e+00-1.0190e-01j],\n",
            "        [-3.5040e-05-3.1296e-06j, -2.4069e-04+2.6949e-03j,\n",
            "          0.0000e+00-1.0190e-01j, -9.9479e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0202, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9541e-01-9.4041e-02j,  1.5451e-03-1.6355e-02j,\n",
            "          0.0000e+00-6.9752e-03j,  7.7479e-04+0.0000e+00j],\n",
            "        [ 1.5451e-03-1.6355e-02j, -9.9541e-01-9.4041e-02j,\n",
            "          7.7479e-04+0.0000e+00j,  0.0000e+00-6.9752e-03j],\n",
            "        [ 6.6001e-04-6.9860e-03j,  1.1478e-04+1.0844e-05j,\n",
            "         -9.9386e-01+0.0000e+00j,  0.0000e+00-1.1040e-01j],\n",
            "        [ 1.1478e-04+1.0844e-05j,  6.6001e-04-6.9860e-03j,\n",
            "          0.0000e+00-1.1040e-01j, -9.9386e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0186, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9455e-01-1.0083e-01j,  2.1874e-03-2.1576e-02j,\n",
            "          0.0000e+00-1.5369e-02j,  1.8957e-03+0.0000e+00j],\n",
            "        [ 2.1874e-03-2.1576e-02j, -9.9455e-01-1.0083e-01j,\n",
            "          1.8957e-03+0.0000e+00j,  0.0000e+00-1.5369e-02j],\n",
            "        [ 1.5615e-03-1.5403e-02j,  3.3416e-04+3.3877e-05j,\n",
            "         -9.9236e-01+0.0000e+00j,  0.0000e+00-1.2240e-01j],\n",
            "        [ 3.3416e-04+3.3877e-05j,  1.5615e-03-1.5403e-02j,\n",
            "          0.0000e+00-1.2240e-01j, -9.9236e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0169, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9339e-01-1.0893e-01j,  3.0971e-03-2.8244e-02j,\n",
            "          0.0000e+00-2.2127e-02j,  3.0650e-03+0.0000e+00j],\n",
            "        [ 3.0971e-03-2.8244e-02j, -9.9339e-01-1.0893e-01j,\n",
            "          3.0650e-03+0.0000e+00j,  0.0000e+00-2.2127e-02j],\n",
            "        [ 2.4340e-03-2.2196e-02j,  6.3107e-04+6.9201e-05j,\n",
            "         -9.9029e-01+0.0000e+00j,  0.0000e+00-1.3718e-01j],\n",
            "        [ 6.3107e-04+6.9201e-05j,  2.4340e-03-2.2196e-02j,\n",
            "          0.0000e+00-1.3718e-01j, -9.9029e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0154, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9198e-01-1.1796e-01j,  4.2766e-03-3.5965e-02j,\n",
            "          0.0000e+00-2.7004e-02j,  4.2083e-03+0.0000e+00j],\n",
            "        [ 4.2766e-03-3.5965e-02j, -9.9198e-01-1.1796e-01j,\n",
            "          4.2083e-03+0.0000e+00j,  0.0000e+00-2.7004e-02j],\n",
            "        [ 3.2250e-03-2.7121e-02j,  9.8330e-04+1.1692e-04j,\n",
            "         -9.8770e-01+0.0000e+00j,  0.0000e+00-1.5392e-01j],\n",
            "        [ 9.8330e-04+1.1692e-04j,  3.2250e-03-2.7121e-02j,\n",
            "          0.0000e+00-1.5392e-01j, -9.8770e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0140, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9904-0.1275j,  0.0057-0.0443j,  0.0000-0.0299j,  0.0052+0.0000j],\n",
            "        [ 0.0057-0.0443j, -0.9904-0.1275j,  0.0052+0.0000j,  0.0000-0.0299j],\n",
            "        [ 0.0039-0.0301j,  0.0013+0.0002j, -0.9847+0.0000j,  0.0000-0.1718j],\n",
            "        [ 0.0013+0.0002j,  0.0039-0.0301j,  0.0000-0.1718j, -0.9847+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0130, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9886-0.1371j,  0.0073-0.0530j,  0.0000-0.0308j,  0.0060+0.0000j],\n",
            "        [ 0.0073-0.0530j, -0.9886-0.1371j,  0.0060+0.0000j,  0.0000-0.0308j],\n",
            "        [ 0.0043-0.0310j,  0.0017+0.0002j, -0.9813+0.0000j,  0.0000-0.1901j],\n",
            "        [ 0.0017+0.0002j,  0.0043-0.0310j,  0.0000-0.1901j, -0.9813+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0123, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9868-0.1465j,  0.0091-0.0615j,  0.0000-0.0298j,  0.0063+0.0000j],\n",
            "        [ 0.0091-0.0615j, -0.9868-0.1465j,  0.0063+0.0000j,  0.0000-0.0298j],\n",
            "        [ 0.0045-0.0301j,  0.0019+0.0003j, -0.9776+0.0000j,  0.0000-0.2080j],\n",
            "        [ 0.0019+0.0003j,  0.0045-0.0301j,  0.0000-0.2080j, -0.9776+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0120, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9850-0.1553j,  0.0110-0.0696j,  0.0000-0.0272j,  0.0063+0.0000j],\n",
            "        [ 0.0110-0.0696j, -0.9850-0.1553j,  0.0063+0.0000j,  0.0000-0.0272j],\n",
            "        [ 0.0043-0.0275j,  0.0019+0.0003j, -0.9740+0.0000j,  0.0000-0.2249j],\n",
            "        [ 0.0019+0.0003j,  0.0043-0.0275j,  0.0000-0.2249j, -0.9740+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0120, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9832-0.1631j,  0.0128-0.0770j,  0.0000-0.0233j,  0.0058+0.0000j],\n",
            "        [ 0.0128-0.0770j, -0.9832-0.1631j,  0.0058+0.0000j,  0.0000-0.0233j],\n",
            "        [ 0.0039-0.0236j,  0.0018+0.0003j, -0.9704+0.0000j,  0.0000-0.2401j],\n",
            "        [ 0.0018+0.0003j,  0.0039-0.0236j,  0.0000-0.2401j, -0.9704+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0122, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9816-0.1699j,  0.0144-0.0834j,  0.0000-0.0184j,  0.0048+0.0000j],\n",
            "        [ 0.0144-0.0834j, -0.9816-0.1699j,  0.0048+0.0000j,  0.0000-0.0184j],\n",
            "        [ 0.0032-0.0187j,  0.0016+0.0003j, -0.9672+0.0000j,  0.0000-0.2533j],\n",
            "        [ 0.0016+0.0003j,  0.0032-0.0187j,  0.0000-0.2533j, -0.9672+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0125, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9803-1.7527e-01j,  0.0159-8.8653e-02j,  0.0000-1.2877e-02j,\n",
            "          0.0035+0.0000e+00j],\n",
            "        [ 0.0159-8.8653e-02j, -0.9803-1.7527e-01j,  0.0035+0.0000e+00j,\n",
            "          0.0000-1.2877e-02j],\n",
            "        [ 0.0023-1.3089e-02j,  0.0012+2.1163e-04j, -0.9645+0.0000e+00j,\n",
            "          0.0000-2.6392e-01j],\n",
            "        [ 0.0012+2.1163e-04j,  0.0023-1.3089e-02j,  0.0000-2.6392e-01j,\n",
            "         -0.9645+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0129, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.7926e-01-1.7924e-01j,  1.6961e-02-9.2665e-02j,\n",
            "          0.0000e+00-7.1362e-03j,  2.0164e-03+0.0000e+00j],\n",
            "        [ 1.6961e-02-9.2665e-02j, -9.7926e-01-1.7924e-01j,\n",
            "          2.0164e-03+0.0000e+00j,  0.0000e+00-7.1362e-03j],\n",
            "        [ 1.3292e-03-7.2620e-03j,  6.8719e-04+1.2578e-04j,\n",
            "         -9.6229e-01+0.0000e+00j,  0.0000e+00-2.7190e-01j],\n",
            "        [ 6.8719e-04+1.2578e-04j,  1.3292e-03-7.2620e-03j,\n",
            "          0.0000e+00-2.7190e-01j, -9.6229e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0133, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.7855e-01-1.8174e-01j,  1.7712e-02-9.5370e-02j,\n",
            "          0.0000e+00-1.5152e-03j,  4.3699e-04+0.0000e+00j],\n",
            "        [ 1.7712e-02-9.5370e-02j, -9.7855e-01-1.8174e-01j,\n",
            "          4.3699e-04+0.0000e+00j,  0.0000e+00-1.5152e-03j],\n",
            "        [ 2.8660e-04-1.5431e-03j,  1.5040e-04+2.7932e-05j,\n",
            "         -9.6084e-01+0.0000e+00j,  0.0000e+00-2.7711e-01j],\n",
            "        [ 1.5040e-04+2.7932e-05j,  2.8660e-04-1.5431e-03j,\n",
            "          0.0000e+00-2.7711e-01j, -9.6084e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0135, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.7820e-01-1.8278e-01j,  1.8083e-02-9.6776e-02j,\n",
            "          0.0000e+00+3.6701e-03j, -1.0686e-03+0.0000e+00j],\n",
            "        [ 1.8083e-02-9.6776e-02j, -9.7820e-01-1.8278e-01j,\n",
            "         -1.0686e-03+0.0000e+00j,  0.0000e+00+3.6701e-03j],\n",
            "        [-6.9869e-04+3.7392e-03j, -3.6993e-04-6.9124e-05j,\n",
            "         -9.6012e-01+0.0000e+00j,  0.0000e+00-2.7956e-01j],\n",
            "        [-3.6993e-04-6.9124e-05j, -6.9869e-04+3.7392e-03j,\n",
            "          0.0000e+00-2.7956e-01j, -9.6012e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0135, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.7822e-01-1.8245e-01j,  1.8081e-02-9.6942e-02j,\n",
            "          0.0000e+00+8.1538e-03j, -2.3727e-03+0.0000e+00j],\n",
            "        [ 1.8081e-02-9.6942e-02j, -9.7822e-01-1.8245e-01j,\n",
            "         -2.3727e-03+0.0000e+00j,  0.0000e+00+8.1538e-03j],\n",
            "        [-1.5494e-03+8.3074e-03j, -8.2326e-04-1.5355e-04j,\n",
            "         -9.6014e-01+0.0000e+00j,  0.0000e+00-2.7939e-01j],\n",
            "        [-8.2326e-04-1.5355e-04j, -1.5494e-03+8.3074e-03j,\n",
            "          0.0000e+00-2.7939e-01j, -9.6014e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0134, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9786-1.8086e-01j,  0.0177-9.5972e-02j,  0.0000+1.1729e-02j,\n",
            "         -0.0034+0.0000e+00j],\n",
            "        [ 0.0177-9.5972e-02j, -0.9786-1.8086e-01j, -0.0034+0.0000e+00j,\n",
            "          0.0000+1.1729e-02j],\n",
            "        [-0.0022+1.1945e-02j, -0.0012-2.1652e-04j, -0.9608+0.0000e+00j,\n",
            "          0.0000-2.7684e-01j],\n",
            "        [-0.0012-2.1652e-04j, -0.0022+1.1945e-02j,  0.0000-2.7684e-01j,\n",
            "         -0.9608+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0131, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9792-1.7819e-01j,  0.0171-9.4013e-02j,  0.0000+1.4255e-02j,\n",
            "         -0.0040+0.0000e+00j],\n",
            "        [ 0.0171-9.4013e-02j, -0.9792-1.7819e-01j, -0.0040+0.0000e+00j,\n",
            "          0.0000+1.4255e-02j],\n",
            "        [-0.0026+1.4508e-02j, -0.0014-2.5346e-04j, -0.9621+0.0000e+00j,\n",
            "          0.0000-2.7220e-01j],\n",
            "        [-0.0014-2.5346e-04j, -0.0026+1.4508e-02j,  0.0000-2.7220e-01j,\n",
            "         -0.9621+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0128, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9801-1.7462e-01j,  0.0163-9.1238e-02j,  0.0000+1.5663e-02j,\n",
            "         -0.0043+0.0000e+00j],\n",
            "        [ 0.0163-9.1238e-02j, -0.9801-1.7462e-01j, -0.0043+0.0000e+00j,\n",
            "          0.0000+1.5663e-02j],\n",
            "        [-0.0028+1.5928e-02j, -0.0015-2.6415e-04j, -0.9639+0.0000e+00j,\n",
            "          0.0000-2.6586e-01j],\n",
            "        [-0.0015-2.6415e-04j, -0.0028+1.5928e-02j,  0.0000-2.6586e-01j,\n",
            "         -0.9639+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0123, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9812-1.7037e-01j,  0.0153-8.7845e-02j,  0.0000+1.5957e-02j,\n",
            "         -0.0043+0.0000e+00j],\n",
            "        [ 0.0153-8.7845e-02j, -0.9812-1.7037e-01j, -0.0043+0.0000e+00j,\n",
            "          0.0000+1.5957e-02j],\n",
            "        [-0.0028+1.6209e-02j, -0.0015-2.5197e-04j, -0.9659+0.0000e+00j,\n",
            "          0.0000-2.5822e-01j],\n",
            "        [-0.0015-2.5197e-04j, -0.0028+1.6209e-02j,  0.0000-2.5822e-01j,\n",
            "         -0.9659+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0119, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9824-1.6568e-01j,  0.0142-8.4041e-02j,  0.0000+1.5204e-02j,\n",
            "         -0.0039+0.0000e+00j],\n",
            "        [ 0.0142-8.4041e-02j, -0.9824-1.6568e-01j, -0.0039+0.0000e+00j,\n",
            "          0.0000+1.5204e-02j],\n",
            "        [-0.0026+1.5427e-02j, -0.0013-2.2258e-04j, -0.9682+0.0000e+00j,\n",
            "          0.0000-2.4972e-01j],\n",
            "        [-0.0013-2.2258e-04j, -0.0026+1.5427e-02j,  0.0000-2.4972e-01j,\n",
            "         -0.9682+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0116, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9836-1.6077e-01j,  0.0131-8.0039e-02j,  0.0000+1.3537e-02j,\n",
            "         -0.0034+0.0000e+00j],\n",
            "        [ 0.0131-8.0039e-02j, -0.9836-1.6077e-01j, -0.0034+0.0000e+00j,\n",
            "          0.0000+1.3537e-02j],\n",
            "        [-0.0022+1.3719e-02j, -0.0011-1.8249e-04j, -0.9705+0.0000e+00j,\n",
            "          0.0000-2.4081e-01j],\n",
            "        [-0.0011-1.8249e-04j, -0.0022+1.3719e-02j,  0.0000-2.4081e-01j,\n",
            "         -0.9705+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0114, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8471e-01-1.5587e-01j,  1.2037e-02-7.6044e-02j,\n",
            "          0.0000e+00+1.1135e-02j, -2.6548e-03+0.0000e+00j],\n",
            "        [ 1.2037e-02-7.6044e-02j, -9.8471e-01-1.5587e-01j,\n",
            "         -2.6548e-03+0.0000e+00j,  0.0000e+00+1.1135e-02j],\n",
            "        [-1.7843e-03+1.1273e-02j, -8.7052e-04-1.3779e-04j,\n",
            "         -9.7267e-01+0.0000e+00j,  0.0000e+00-2.3191e-01j],\n",
            "        [-8.7052e-04-1.3779e-04j, -1.7843e-03+1.1273e-02j,\n",
            "          0.0000e+00-2.3191e-01j, -9.7267e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8576e-01-1.5118e-01j,  1.1080e-02-7.2248e-02j,\n",
            "          0.0000e+00+8.2128e-03j, -1.8826e-03+0.0000e+00j],\n",
            "        [ 1.1080e-02-7.2248e-02j, -9.8576e-01-1.5118e-01j,\n",
            "         -1.8826e-03+0.0000e+00j,  0.0000e+00+8.2128e-03j],\n",
            "        [-1.2738e-03+8.3061e-03j, -6.0876e-04-9.3361e-05j,\n",
            "         -9.7468e-01+0.0000e+00j,  0.0000e+00-2.2343e-01j],\n",
            "        [-6.0876e-04-9.3361e-05j, -1.2738e-03+8.3061e-03j,\n",
            "          0.0000e+00-2.2343e-01j, -9.7468e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8669e-01-1.4689e-01j,  1.0245e-02-6.8818e-02j,\n",
            "          0.0000e+00+5.0067e-03j, -1.1060e-03+0.0000e+00j],\n",
            "        [ 1.0245e-02-6.8818e-02j, -9.8669e-01-1.4689e-01j,\n",
            "         -1.1060e-03+0.0000e+00j,  0.0000e+00+5.0067e-03j],\n",
            "        [-7.5318e-04+5.0592e-03j, -3.5286e-04-5.2531e-05j,\n",
            "         -9.7644e-01+0.0000e+00j,  0.0000e+00-2.1571e-01j],\n",
            "        [-3.5286e-04-5.2531e-05j, -7.5318e-04+5.0592e-03j,\n",
            "          0.0000e+00-2.1571e-01j, -9.7644e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8746e-01-1.4316e-01j,  9.5532e-03-6.5896e-02j,\n",
            "          0.0000e+00+1.7536e-03j, -3.7487e-04+0.0000e+00j],\n",
            "        [ 9.5532e-03-6.5896e-02j, -9.8746e-01-1.4316e-01j,\n",
            "         -3.7487e-04+0.0000e+00j,  0.0000e+00+1.7536e-03j],\n",
            "        [-2.5671e-04+1.7707e-03j, -1.1816e-04-1.7131e-05j,\n",
            "         -9.7790e-01+0.0000e+00j,  0.0000e+00-2.0905e-01j],\n",
            "        [-1.1816e-04-1.7131e-05j, -2.5671e-04+1.7707e-03j,\n",
            "          0.0000e+00-2.0905e-01j, -9.7790e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0115, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8805e-01-1.4009e-01j,  9.0153e-03-6.3585e-02j,\n",
            "          0.0000e+00-1.3232e-03j,  2.7527e-04+0.0000e+00j],\n",
            "        [ 9.0153e-03-6.3585e-02j, -9.8805e-01-1.4009e-01j,\n",
            "          2.7527e-04+0.0000e+00j,  0.0000e+00-1.3232e-03j],\n",
            "        [ 1.8934e-04-1.3354e-03j,  8.5937e-05+1.2184e-05j,\n",
            "         -9.7904e-01+0.0000e+00j,  0.0000e+00-2.0367e-01j],\n",
            "        [ 8.5937e-05+1.2184e-05j,  1.8934e-04-1.3354e-03j,\n",
            "          0.0000e+00-2.0367e-01j, -9.7904e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0116, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8848e-01-1.3777e-01j,  8.6348e-03-6.1954e-02j,\n",
            "          0.0000e+00-4.0301e-03j,  8.2145e-04+0.0000e+00j],\n",
            "        [ 8.6348e-03-6.1954e-02j, -9.8848e-01-1.3777e-01j,\n",
            "          8.2145e-04+0.0000e+00j,  0.0000e+00-4.0301e-03j],\n",
            "        [ 5.6664e-04-4.0656e-03j,  2.5481e-04+3.5515e-05j,\n",
            "         -9.7984e-01+0.0000e+00j,  0.0000e+00-1.9972e-01j],\n",
            "        [ 2.5481e-04+3.5515e-05j,  5.6664e-04-4.0656e-03j,\n",
            "          0.0000e+00-1.9972e-01j, -9.7984e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0117, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8874e-01-1.3623e-01j,  8.4092e-03-6.1034e-02j,\n",
            "          0.0000e+00-6.2106e-03j,  1.2497e-03+0.0000e+00j],\n",
            "        [ 8.4092e-03-6.1034e-02j, -9.8874e-01-1.3623e-01j,\n",
            "          1.2497e-03+0.0000e+00j,  0.0000e+00-6.2106e-03j],\n",
            "        [ 8.6304e-04-6.2639e-03j,  3.8666e-04+5.3274e-05j,\n",
            "         -9.8033e-01+0.0000e+00j,  0.0000e+00-1.9726e-01j],\n",
            "        [ 3.8666e-04+5.3274e-05j,  8.6304e-04-6.2639e-03j,\n",
            "          0.0000e+00-1.9726e-01j, -9.8033e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0118, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8885e-01-1.3547e-01j,  8.3314e-03-6.0815e-02j,\n",
            "          0.0000e+00-7.7607e-03j,  1.5535e-03+0.0000e+00j],\n",
            "        [ 8.3314e-03-6.0815e-02j, -9.8885e-01-1.3547e-01j,\n",
            "          1.5535e-03+0.0000e+00j,  0.0000e+00-7.7607e-03j],\n",
            "        [ 1.0722e-03-7.8266e-03j,  4.8135e-04+6.5942e-05j,\n",
            "         -9.8052e-01+0.0000e+00j,  0.0000e+00-1.9628e-01j],\n",
            "        [ 4.8135e-04+6.5942e-05j,  1.0722e-03-7.8266e-03j,\n",
            "          0.0000e+00-1.9628e-01j, -9.8052e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0118, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8882e-01-1.3544e-01j,  8.3908e-03-6.1258e-02j,\n",
            "          0.0000e+00-8.6259e-03j,  1.7306e-03+0.0000e+00j],\n",
            "        [ 8.3908e-03-6.1258e-02j, -9.8882e-01-1.3544e-01j,\n",
            "          1.7306e-03+0.0000e+00j,  0.0000e+00-8.6259e-03j],\n",
            "        [ 1.1916e-03-8.6997e-03j,  5.3896e-04+7.3823e-05j,\n",
            "         -9.8042e-01+0.0000e+00j,  0.0000e+00-1.9670e-01j],\n",
            "        [ 5.3896e-04+7.3823e-05j,  1.1916e-03-8.6997e-03j,\n",
            "          0.0000e+00-1.9670e-01j, -9.8042e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0117, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8866e-01-1.3608e-01j,  8.5740e-03-6.2291e-02j,\n",
            "          0.0000e+00-8.8060e-03j,  1.7824e-03+0.0000e+00j],\n",
            "        [ 8.5740e-03-6.2291e-02j, -9.8866e-01-1.3608e-01j,\n",
            "          1.7824e-03+0.0000e+00j,  0.0000e+00-8.8060e-03j],\n",
            "        [ 1.2227e-03-8.8830e-03j,  5.5968e-04+7.7037e-05j,\n",
            "         -9.8009e-01+0.0000e+00j,  0.0000e+00-1.9837e-01j],\n",
            "        [ 5.5968e-04+7.7037e-05j,  1.2227e-03-8.8830e-03j,\n",
            "          0.0000e+00-1.9837e-01j, -9.8009e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0116, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8840e-01-1.3729e-01j,  8.8647e-03-6.3820e-02j,\n",
            "          0.0000e+00-8.3477e-03j,  1.7139e-03+0.0000e+00j],\n",
            "        [ 8.8647e-03-6.3820e-02j, -9.8840e-01-1.3729e-01j,\n",
            "          1.7139e-03+0.0000e+00j,  0.0000e+00-8.3477e-03j],\n",
            "        [ 1.1700e-03-8.4232e-03j,  5.4388e-04+7.5546e-05j,\n",
            "         -9.7953e-01+0.0000e+00j,  0.0000e+00-2.0111e-01j],\n",
            "        [ 5.4388e-04+7.5546e-05j,  1.1700e-03-8.4232e-03j,\n",
            "          0.0000e+00-2.0111e-01j, -9.7953e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0115, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8804e-01-1.3895e-01j,  9.2438e-03-6.5730e-02j,\n",
            "          0.0000e+00-7.3411e-03j,  1.5351e-03+0.0000e+00j],\n",
            "        [ 9.2438e-03-6.5730e-02j, -9.8804e-01-1.3895e-01j,\n",
            "          1.5351e-03+0.0000e+00j,  0.0000e+00-7.3411e-03j],\n",
            "        [ 1.0421e-03-7.4105e-03j,  4.9299e-04+6.9329e-05j,\n",
            "         -9.7880e-01+0.0000e+00j,  0.0000e+00-2.0468e-01j],\n",
            "        [ 4.9299e-04+6.9329e-05j,  1.0421e-03-7.4105e-03j,\n",
            "          0.0000e+00-2.0468e-01j, -9.7880e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0114, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8762e-01-1.4093e-01j,  9.6891e-03-6.7900e-02j,\n",
            "          0.0000e+00-5.9058e-03j,  1.2611e-03+0.0000e+00j],\n",
            "        [ 9.6891e-03-6.7900e-02j, -9.8762e-01-1.4093e-01j,\n",
            "          1.2611e-03+0.0000e+00j,  0.0000e+00-5.9058e-03j],\n",
            "        [ 8.5108e-04-5.9643e-03j,  4.1005e-04+5.8513e-05j,\n",
            "         -9.7793e-01+0.0000e+00j,  0.0000e+00-2.0883e-01j],\n",
            "        [ 4.1005e-04+5.8513e-05j,  8.5108e-04-5.9643e-03j,\n",
            "          0.0000e+00-2.0883e-01j, -9.7793e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8715e-01-1.4310e-01j,  1.0177e-02-7.0203e-02j,\n",
            "          0.0000e+00-4.1827e-03j,  9.1320e-04+0.0000e+00j],\n",
            "        [ 1.0177e-02-7.0203e-02j, -9.8715e-01-1.4310e-01j,\n",
            "          9.1320e-04+0.0000e+00j,  0.0000e+00-4.1827e-03j],\n",
            "        [ 6.1264e-04-4.2263e-03j,  3.0056e-04+4.3569e-05j,\n",
            "         -9.7698e-01+0.0000e+00j,  0.0000e+00-2.1330e-01j],\n",
            "        [ 3.0056e-04+4.3569e-05j,  6.1264e-04-4.2263e-03j,\n",
            "          0.0000e+00-2.1330e-01j, -9.7698e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8666e-01-1.4532e-01j,  1.0681e-02-7.2515e-02j,\n",
            "          0.0000e+00-2.3222e-03j,  5.1831e-04+0.0000e+00j],\n",
            "        [ 1.0681e-02-7.2515e-02j, -9.8666e-01-1.4532e-01j,\n",
            "          5.1831e-04+0.0000e+00j,  0.0000e+00-2.3222e-03j],\n",
            "        [ 3.4578e-04-2.3476e-03j,  1.7254e-04+2.5413e-05j,\n",
            "         -9.7598e-01+0.0000e+00j,  0.0000e+00-2.1784e-01j],\n",
            "        [ 1.7254e-04+2.5413e-05j,  3.4578e-04-2.3476e-03j,\n",
            "          0.0000e+00-2.1784e-01j, -9.7598e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8617e-01-1.4749e-01j,  1.1175e-02-7.4723e-02j,\n",
            "          0.0000e+00-4.7044e-04j,  1.0722e-04+0.0000e+00j],\n",
            "        [ 1.1175e-02-7.4723e-02j, -9.8617e-01-1.4749e-01j,\n",
            "          1.0722e-04+0.0000e+00j,  0.0000e+00-4.7044e-04j],\n",
            "        [ 7.1162e-05-4.7583e-04j,  3.6054e-05+5.3920e-06j,\n",
            "         -9.7500e-01+0.0000e+00j,  0.0000e+00-2.2221e-01j],\n",
            "        [ 3.6054e-05+5.3920e-06j,  7.1162e-05-4.7583e-04j,\n",
            "          0.0000e+00-2.2221e-01j, -9.7500e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8571e-01-1.4948e-01j,  1.1635e-02-7.6725e-02j,\n",
            "          0.0000e+00+1.2387e-03j, -2.8765e-04+0.0000e+00j],\n",
            "        [ 1.1635e-02-7.6725e-02j, -9.8571e-01-1.4948e-01j,\n",
            "         -2.8765e-04+0.0000e+00j,  0.0000e+00+1.2387e-03j],\n",
            "        [-1.9008e-04+1.2535e-03j, -9.7566e-05-1.4795e-05j,\n",
            "         -9.7408e-01+0.0000e+00j,  0.0000e+00-2.2620e-01j],\n",
            "        [-9.7566e-05-1.4795e-05j, -1.9008e-04+1.2535e-03j,\n",
            "          0.0000e+00-2.2620e-01j, -9.7408e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8531e-01-1.5121e-01j,  1.2038e-02-7.8440e-02j,\n",
            "          0.0000e+00+2.6927e-03j, -6.3536e-04+0.0000e+00j],\n",
            "        [ 1.2038e-02-7.8440e-02j, -9.8531e-01-1.5121e-01j,\n",
            "         -6.3536e-04+0.0000e+00j,  0.0000e+00+2.6927e-03j],\n",
            "        [-4.1834e-04+2.7260e-03j, -2.1701e-04-3.3304e-05j,\n",
            "         -9.7327e-01+0.0000e+00j,  0.0000e+00-2.2965e-01j],\n",
            "        [-2.1701e-04-3.3304e-05j, -4.1834e-04+2.7260e-03j,\n",
            "          0.0000e+00-2.2965e-01j, -9.7327e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8497e-01-1.5262e-01j,  1.2366e-02-7.9807e-02j,\n",
            "          0.0000e+00+3.8084e-03j, -9.1011e-04+0.0000e+00j],\n",
            "        [ 1.2366e-02-7.9807e-02j, -9.8497e-01-1.5262e-01j,\n",
            "         -9.1011e-04+0.0000e+00j,  0.0000e+00+3.8084e-03j],\n",
            "        [-5.9761e-04+3.8569e-03j, -3.1250e-04-4.8421e-05j,\n",
            "         -9.7261e-01+0.0000e+00j,  0.0000e+00-2.3242e-01j],\n",
            "        [-3.1250e-04-4.8421e-05j, -5.9761e-04+3.8569e-03j,\n",
            "          0.0000e+00-2.3242e-01j, -9.7261e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8472e-01-1.5365e-01j,  1.2606e-02-8.0786e-02j,\n",
            "          0.0000e+00+4.5340e-03j, -1.0934e-03+0.0000e+00j],\n",
            "        [ 1.2606e-02-8.0786e-02j, -9.8472e-01-1.5365e-01j,\n",
            "         -1.0934e-03+0.0000e+00j,  0.0000e+00+4.5340e-03j],\n",
            "        [-7.1664e-04+4.5928e-03j, -3.7678e-04-5.8793e-05j,\n",
            "         -9.7212e-01+0.0000e+00j,  0.0000e+00-2.3444e-01j],\n",
            "        [-3.7678e-04-5.8793e-05j, -7.1664e-04+4.5928e-03j,\n",
            "          0.0000e+00-2.3444e-01j, -9.7212e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8457e-01-1.5430e-01j,  1.2751e-02-8.1361e-02j,\n",
            "          0.0000e+00+4.8506e-03j, -1.1762e-03+0.0000e+00j],\n",
            "        [ 1.2751e-02-8.1361e-02j, -9.8457e-01-1.5430e-01j,\n",
            "         -1.1762e-03+0.0000e+00j,  0.0000e+00+4.8506e-03j],\n",
            "        [-7.7015e-04+4.9142e-03j, -4.0609e-04-6.3642e-05j,\n",
            "         -9.7182e-01+0.0000e+00j,  0.0000e+00-2.3566e-01j],\n",
            "        [-4.0609e-04-6.3642e-05j, -7.7015e-04+4.9142e-03j,\n",
            "          0.0000e+00-2.3566e-01j, -9.7182e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8452e-01-1.5456e-01j,  1.2801e-02-8.1538e-02j,\n",
            "          0.0000e+00+4.7713e-03j, -1.1593e-03+0.0000e+00j],\n",
            "        [ 1.2801e-02-8.1538e-02j, -9.8452e-01-1.5456e-01j,\n",
            "         -1.1593e-03+0.0000e+00j,  0.0000e+00+4.7713e-03j],\n",
            "        [-7.5891e-04+4.8341e-03j, -4.0036e-04-6.2853e-05j,\n",
            "         -9.7172e-01+0.0000e+00j,  0.0000e+00-2.3610e-01j],\n",
            "        [-4.0036e-04-6.2853e-05j, -7.5891e-04+4.8341e-03j,\n",
            "          0.0000e+00-2.3610e-01j, -9.7172e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8455e-01-1.5445e-01j,  1.2760e-02-8.1341e-02j,\n",
            "          0.0000e+00+4.3365e-03j, -1.0522e-03+0.0000e+00j],\n",
            "        [ 1.2760e-02-8.1341e-02j, -9.8455e-01-1.5445e-01j,\n",
            "         -1.0522e-03+0.0000e+00j,  0.0000e+00+4.3365e-03j],\n",
            "        [-6.8922e-04+4.3934e-03j, -3.6298e-04-5.6942e-05j,\n",
            "         -9.7179e-01+0.0000e+00j,  0.0000e+00-2.3579e-01j],\n",
            "        [-3.6298e-04-5.6942e-05j, -6.8922e-04+4.3934e-03j,\n",
            "          0.0000e+00-2.3579e-01j, -9.7179e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8467e-01-1.5402e-01j,  1.2640e-02-8.0813e-02j,\n",
            "          0.0000e+00+3.6118e-03j, -8.7257e-04+0.0000e+00j],\n",
            "        [ 1.2640e-02-8.0813e-02j, -9.8467e-01-1.5402e-01j,\n",
            "         -8.7257e-04+0.0000e+00j,  0.0000e+00+3.6118e-03j],\n",
            "        [-5.7229e-04+3.6588e-03j, -3.0028e-04-4.6968e-05j,\n",
            "         -9.7203e-01+0.0000e+00j,  0.0000e+00-2.3483e-01j],\n",
            "        [-3.0028e-04-4.6968e-05j, -5.7229e-04+3.6588e-03j,\n",
            "          0.0000e+00-2.3483e-01j, -9.7203e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8485e-01-1.5331e-01j,  1.2455e-02-8.0007e-02j,\n",
            "          0.0000e+00+2.6767e-03j, -6.4227e-04+0.0000e+00j],\n",
            "        [ 1.2455e-02-8.0007e-02j, -9.8485e-01-1.5331e-01j,\n",
            "         -6.4227e-04+0.0000e+00j,  0.0000e+00+2.6767e-03j],\n",
            "        [-4.2203e-04+2.7110e-03j, -2.2024e-04-3.4285e-05j,\n",
            "         -9.7240e-01+0.0000e+00j,  0.0000e+00-2.3332e-01j],\n",
            "        [-2.2024e-04-3.4285e-05j, -4.2203e-04+2.7110e-03j,\n",
            "          0.0000e+00-2.3332e-01j, -9.7240e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0113, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8508e-01-1.5240e-01j,  1.2221e-02-7.8990e-02j,\n",
            "          0.0000e+00+1.6227e-03j, -3.8596e-04+0.0000e+00j],\n",
            "        [ 1.2221e-02-7.8990e-02j, -9.8508e-01-1.5240e-01j,\n",
            "         -3.8596e-04+0.0000e+00j,  0.0000e+00+1.6227e-03j],\n",
            "        [-2.5420e-04+1.6431e-03j, -1.3175e-04-2.0384e-05j,\n",
            "         -9.7286e-01+0.0000e+00j,  0.0000e+00-2.3139e-01j],\n",
            "        [-1.3175e-04-2.0384e-05j, -2.5420e-04+1.6431e-03j,\n",
            "          0.0000e+00-2.3139e-01j, -9.7286e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8534e-01-1.5136e-01j,  1.1956e-02-7.7833e-02j,\n",
            "          0.0000e+00+5.4137e-04j, -1.2747e-04+0.0000e+00j],\n",
            "        [ 1.1956e-02-7.7833e-02j, -9.8534e-01-1.5136e-01j,\n",
            "         -1.2747e-04+0.0000e+00j,  0.0000e+00+5.4137e-04j],\n",
            "        [-8.4179e-05+5.4802e-04j, -4.3289e-05-6.6494e-06j,\n",
            "         -9.7338e-01+0.0000e+00j,  0.0000e+00-2.2919e-01j],\n",
            "        [-4.3289e-05-6.6494e-06j, -8.4179e-05+5.4802e-04j,\n",
            "          0.0000e+00-2.2919e-01j, -9.7338e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8561e-01-1.5024e-01j,  1.1678e-02-7.6608e-02j,\n",
            "          0.0000e+00-4.8202e-04j,  1.1228e-04+0.0000e+00j],\n",
            "        [ 1.1678e-02-7.6608e-02j, -9.8561e-01-1.5024e-01j,\n",
            "          1.1228e-04+0.0000e+00j,  0.0000e+00-4.8202e-04j],\n",
            "        [ 7.4360e-05-4.8780e-04j,  3.7915e-05+5.7797e-06j,\n",
            "         -9.7393e-01+0.0000e+00j,  0.0000e+00-2.2685e-01j],\n",
            "        [ 3.7915e-05+5.7797e-06j,  7.4360e-05-4.8780e-04j,\n",
            "          0.0000e+00-2.2685e-01j, -9.7393e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8587e-01-1.4914e-01j,  1.1404e-02-7.5384e-02j,\n",
            "          0.0000e+00-1.3710e-03j,  3.1588e-04+0.0000e+00j],\n",
            "        [ 1.1404e-02-7.5384e-02j, -9.8587e-01-1.4914e-01j,\n",
            "          3.1588e-04+0.0000e+00j,  0.0000e+00-1.3710e-03j],\n",
            "        [ 2.0983e-04-1.3870e-03j,  1.0606e-04+1.6044e-05j,\n",
            "         -9.7447e-01+0.0000e+00j,  0.0000e+00-2.2452e-01j],\n",
            "        [ 1.0606e-04+1.6044e-05j,  2.0983e-04-1.3870e-03j,\n",
            "          0.0000e+00-2.2452e-01j, -9.7447e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8612e-01-1.4811e-01j,  1.1148e-02-7.4227e-02j,\n",
            "          0.0000e+00-2.0680e-03j,  4.7159e-04+0.0000e+00j],\n",
            "        [ 1.1148e-02-7.4227e-02j, -9.8612e-01-1.4811e-01j,\n",
            "          4.7159e-04+0.0000e+00j,  0.0000e+00-2.0680e-03j],\n",
            "        [ 3.1415e-04-2.0916e-03j,  1.5744e-04+2.3646e-05j,\n",
            "         -9.7497e-01+0.0000e+00j,  0.0000e+00-2.2233e-01j],\n",
            "        [ 1.5744e-04+2.3646e-05j,  3.1415e-04-2.0916e-03j,\n",
            "          0.0000e+00-2.2233e-01j, -9.7497e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8633e-01-1.4720e-01j,  1.0923e-02-7.3190e-02j,\n",
            "          0.0000e+00-2.5340e-03j,  5.7254e-04+0.0000e+00j],\n",
            "        [ 1.0923e-02-7.3190e-02j, -9.8633e-01-1.4720e-01j,\n",
            "          5.7254e-04+0.0000e+00j,  0.0000e+00-2.5340e-03j],\n",
            "        [ 3.8240e-04-2.5624e-03j,  1.9014e-04+2.8376e-05j,\n",
            "         -9.7541e-01+0.0000e+00j,  0.0000e+00-2.2039e-01j],\n",
            "        [ 1.9014e-04+2.8376e-05j,  3.8240e-04-2.5624e-03j,\n",
            "          0.0000e+00-2.2039e-01j, -9.7541e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8651e-01-1.4646e-01j,  1.0736e-02-7.2318e-02j,\n",
            "          0.0000e+00-2.7528e-03j,  6.1720e-04+0.0000e+00j],\n",
            "        [ 1.0736e-02-7.2318e-02j, -9.8651e-01-1.4646e-01j,\n",
            "          6.1720e-04+0.0000e+00j,  0.0000e+00-2.7528e-03j],\n",
            "        [ 4.1318e-04-2.7831e-03j,  2.0402e-04+3.0289e-05j,\n",
            "         -9.7577e-01+0.0000e+00j,  0.0000e+00-2.1878e-01j],\n",
            "        [ 2.0402e-04+3.0289e-05j,  4.1318e-04-2.7831e-03j,\n",
            "          0.0000e+00-2.1878e-01j, -9.7577e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8664e-01-1.4592e-01j,  1.0595e-02-7.1641e-02j,\n",
            "          0.0000e+00-2.7281e-03j,  6.0810e-04+0.0000e+00j],\n",
            "        [ 1.0595e-02-7.1641e-02j, -9.8664e-01-1.4592e-01j,\n",
            "          6.0810e-04+0.0000e+00j,  0.0000e+00-2.7281e-03j],\n",
            "        [ 4.0786e-04-2.7578e-03j,  2.0025e-04+2.9615e-05j,\n",
            "         -9.7604e-01+0.0000e+00j,  0.0000e+00-2.1756e-01j],\n",
            "        [ 2.0025e-04+2.9615e-05j,  4.0786e-04-2.7578e-03j,\n",
            "          0.0000e+00-2.1756e-01j, -9.7604e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8672e-01-1.4559e-01j,  1.0503e-02-7.1179e-02j,\n",
            "          0.0000e+00-2.4842e-03j,  5.5163e-04+0.0000e+00j],\n",
            "        [ 1.0503e-02-7.1179e-02j, -9.8672e-01-1.4559e-01j,\n",
            "          5.5163e-04+0.0000e+00j,  0.0000e+00-2.4842e-03j],\n",
            "        [ 3.7050e-04-2.5109e-03j,  1.8113e-04+2.6727e-05j,\n",
            "         -9.7622e-01+0.0000e+00j,  0.0000e+00-2.1677e-01j],\n",
            "        [ 1.8113e-04+2.6727e-05j,  3.7050e-04-2.5109e-03j,\n",
            "          0.0000e+00-2.1677e-01j, -9.7622e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8676e-01-1.4549e-01j,  1.0459e-02-7.0934e-02j,\n",
            "          0.0000e+00-2.0608e-03j,  4.5684e-04+0.0000e+00j],\n",
            "        [ 1.0459e-02-7.0934e-02j, -9.8676e-01-1.4549e-01j,\n",
            "          4.5684e-04+0.0000e+00j,  0.0000e+00-2.0608e-03j],\n",
            "        [ 3.0710e-04-2.0829e-03j,  1.4973e-04+2.2077e-05j,\n",
            "         -9.7630e-01+0.0000e+00j,  0.0000e+00-2.1642e-01j],\n",
            "        [ 1.4973e-04+2.2077e-05j,  3.0710e-04-2.0829e-03j,\n",
            "          0.0000e+00-2.1642e-01j, -9.7630e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8674e-01-1.4559e-01j,  1.0461e-02-7.0898e-02j,\n",
            "          0.0000e+00-1.5077e-03j,  3.3433e-04+0.0000e+00j],\n",
            "        [ 1.0461e-02-7.0898e-02j, -9.8674e-01-1.4559e-01j,\n",
            "          3.3433e-04+0.0000e+00j,  0.0000e+00-1.5077e-03j],\n",
            "        [ 2.2484e-04-1.5239e-03j,  1.0949e-04+1.6155e-05j,\n",
            "         -9.7628e-01+0.0000e+00j,  0.0000e+00-2.1649e-01j],\n",
            "        [ 1.0949e-04+1.6155e-05j,  2.2484e-04-1.5239e-03j,\n",
            "          0.0000e+00-2.1649e-01j, -9.7628e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8669e-01-1.4588e-01j,  1.0505e-02-7.1051e-02j,\n",
            "          0.0000e+00-8.8357e-04j,  1.9635e-04+0.0000e+00j],\n",
            "        [ 1.0505e-02-7.1051e-02j, -9.8669e-01-1.4588e-01j,\n",
            "          1.9635e-04+0.0000e+00j,  0.0000e+00-8.8357e-04j],\n",
            "        [ 1.3204e-04-8.9308e-04j,  6.4311e-05+9.5082e-06j,\n",
            "         -9.7619e-01+0.0000e+00j,  0.0000e+00-2.1693e-01j],\n",
            "        [ 6.4311e-05+9.5082e-06j,  1.3204e-04-8.9308e-04j,\n",
            "          0.0000e+00-2.1693e-01j, -9.7619e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0112, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8660e-01-1.4632e-01j,  1.0584e-02-7.1366e-02j,\n",
            "          0.0000e+00-2.4500e-04j,  5.4646e-05+0.0000e+00j],\n",
            "        [ 1.0584e-02-7.1366e-02j, -9.8660e-01-1.4632e-01j,\n",
            "          5.4646e-05+0.0000e+00j,  0.0000e+00-2.4500e-04j],\n",
            "        [ 3.6731e-05-2.4766e-04j,  1.7915e-05+2.6570e-06j,\n",
            "         -9.7602e-01+0.0000e+00j,  0.0000e+00-2.1769e-01j],\n",
            "        [ 1.7915e-05+2.6570e-06j,  3.6731e-05-2.4766e-04j,\n",
            "          0.0000e+00-2.1769e-01j, -9.7602e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fdcc36be710>]"
            ]
          },
          "metadata": {},
          "execution_count": 61
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "theta = 0.5\n",
        "target_unitary = torch.tensor(\n",
        "    [[1, 0, 0, 0],\n",
        "      [0, 1, 0, 0],\n",
        "      [0, 0, np.cos(theta/2), -1j*np.sin(theta/2)],\n",
        "      [0, 0, -1j*np.sin(theta/2), np.cos(theta/2)],\n",
        "      ], dtype=torch.complex64)\n",
        "\n",
        "optimizer = optim.Adam(params=list(pulse_q0.parameters()) + list(pulse_q1.parameters()) + list(pulse_q01.parameters()), lr=5e-3)\n",
        "\n",
        "losses = []\n",
        "for k in range(100):\n",
        "    u_0 = pulse_q0.get_unitary()\n",
        "    u_1 = pulse_q1.get_unitary()\n",
        "    u_01 = pulse_q01.get_unitary()\n",
        "    # overall_u = u_01\n",
        "    overall_u = torch.kron(u_0, u_1) @ u_01\n",
        "    # loss = (abs(pulse.get_unitary() - target_unitary)**2).sum()\n",
        "    loss = 1 - (torch.trace(overall_u @ target_unitary) / target_unitary.shape[0]).abs() ** 2\n",
        "    losses.append(loss.item())\n",
        "    optimizer.zero_grad()\n",
        "    loss.backward()\n",
        "    optimizer.step()\n",
        "    # print(pulse.pulse_shape.grad)\n",
        "    print(loss)\n",
        "    # print(pulse.pulse_shape)\n",
        "    # print(pulse.get_unitary())\n",
        "    print(overall_u)\n",
        "\n",
        "\n",
        "plt.xlabel(\"Number of Iterations\")\n",
        "plt.ylabel(\"Training Losses\")\n",
        "plt.title(\"Training from Obtained Pulses\")\n",
        "plt.plot(losses[:100])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "MEFZXt35kwnB",
        "outputId": "7c892fba-fa42-47ac-ebaf-88ee33c73175"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "tensor(0.0085, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8648e-01-1.4689e-01j,  1.0692e-02-7.1807e-02j,\n",
            "          0.0000e+00+3.5304e-04j, -7.9124e-05+0.0000e+00j],\n",
            "        [ 1.0692e-02-7.1807e-02j, -9.8648e-01-1.4689e-01j,\n",
            "         -7.9124e-05+0.0000e+00j,  0.0000e+00+3.5304e-04j],\n",
            "        [-5.3144e-05+3.5691e-04j, -2.5980e-05-3.8684e-06j,\n",
            "         -9.7579e-01+0.0000e+00j,  0.0000e+00-2.1869e-01j],\n",
            "        [-2.5980e-05-3.8684e-06j, -5.3144e-05+3.5691e-04j,\n",
            "          0.0000e+00-2.1869e-01j, -9.7579e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0134, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9937-9.7513e-02j,  0.0022-2.2524e-02j,  0.0000-4.9257e-02j,\n",
            "          0.0060+0.0000e+00j],\n",
            "        [ 0.0022-2.2524e-02j, -0.9937-9.7513e-02j,  0.0060+0.0000e+00j,\n",
            "          0.0000-4.9257e-02j],\n",
            "        [ 0.0048-4.9367e-02j,  0.0011+1.0980e-04j, -0.9915+0.0000e+00j,\n",
            "          0.0000-1.2004e-01j],\n",
            "        [ 0.0011+1.0980e-04j,  0.0048-4.9367e-02j,  0.0000-1.2004e-01j,\n",
            "         -0.9915+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0085, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9242e-01-1.1379e-01j,  5.0743e-03-4.4256e-02j,\n",
            "          0.0000e+00-1.2517e-02j,  2.0036e-03+0.0000e+00j],\n",
            "        [ 5.0743e-03-4.4256e-02j, -9.9242e-01-1.1379e-01j,\n",
            "          2.0036e-03+0.0000e+00j,  0.0000e+00-1.2517e-02j],\n",
            "        [ 1.4425e-03-1.2581e-02j,  5.6106e-04+6.4329e-05j,\n",
            "         -9.8735e-01+0.0000e+00j,  0.0000e+00-1.5804e-01j],\n",
            "        [ 5.6106e-04+6.4329e-05j,  1.4425e-03-1.2581e-02j,\n",
            "          0.0000e+00-1.5804e-01j, -9.8735e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0086, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9878-0.1363j,  0.0099-0.0715j,  0.0000+0.0224j, -0.0048+0.0000j],\n",
            "        [ 0.0099-0.0715j, -0.9878-0.1363j, -0.0048+0.0000j,  0.0000+0.0224j],\n",
            "        [-0.0031+0.0227j, -0.0016-0.0002j, -0.9779+0.0000j,  0.0000-0.2079j],\n",
            "        [-0.0016-0.0002j, -0.0031+0.0227j,  0.0000-0.2079j, -0.9779+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0107, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9847-0.1461j,  0.0128-0.0860j,  0.0000+0.0366j, -0.0087+0.0000j],\n",
            "        [ 0.0128-0.0860j, -0.9847-0.1461j, -0.0087+0.0000j,  0.0000+0.0366j],\n",
            "        [-0.0055+0.0371j, -0.0032-0.0005j, -0.9720+0.0000j,  0.0000-0.2320j],\n",
            "        [-0.0032-0.0005j, -0.0055+0.0371j,  0.0000-0.2320j, -0.9720+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0099, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9860-0.1401j,  0.0119-0.0837j,  0.0000+0.0319j, -0.0073+0.0000j],\n",
            "        [ 0.0119-0.0837j, -0.9860-0.1401j, -0.0073+0.0000j,  0.0000+0.0319j],\n",
            "        [-0.0046+0.0323j, -0.0027-0.0004j, -0.9741+0.0000j,  0.0000-0.2239j],\n",
            "        [-0.0027-0.0004j, -0.0046+0.0323j,  0.0000-0.2239j, -0.9741+0.0000j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0082, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9892-1.2601e-01j,  0.0092-7.2174e-02j,  0.0000+1.7145e-02j,\n",
            "         -0.0035+0.0000e+00j],\n",
            "        [ 0.0092-7.2174e-02j, -0.9892-1.2601e-01j, -0.0035+0.0000e+00j,\n",
            "          0.0000+1.7145e-02j],\n",
            "        [-0.0022+1.7306e-02j, -0.0013-1.6085e-04j, -0.9800+0.0000e+00j,\n",
            "          0.0000-1.9818e-01j],\n",
            "        [-0.0013-1.6085e-04j, -0.0022+1.7306e-02j,  0.0000-1.9818e-01j,\n",
            "         -0.9800+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9206e-01-1.1110e-01j,  6.5652e-03-5.8621e-02j,\n",
            "          0.0000e+00-1.1941e-03j,  2.0566e-04+0.0000e+00j],\n",
            "        [ 6.5652e-03-5.8621e-02j, -9.9206e-01-1.1110e-01j,\n",
            "          2.0566e-04+0.0000e+00j,  0.0000e+00-1.1941e-03j],\n",
            "        [ 1.3462e-04-1.2021e-03j,  7.1032e-05+7.9551e-06j,\n",
            "         -9.8549e-01+0.0000e+00j,  0.0000e+00-1.6972e-01j],\n",
            "        [ 7.1032e-05+7.9551e-06j,  1.3462e-04-1.2021e-03j,\n",
            "          0.0000e+00-1.6972e-01j, -9.8549e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0089, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9331e-01-1.0263e-01j,  5.1453e-03-4.9799e-02j,\n",
            "          0.0000e+00-1.7105e-02j,  2.6385e-03+0.0000e+00j],\n",
            "        [ 5.1453e-03-4.9799e-02j, -9.9331e-01-1.0263e-01j,\n",
            "          2.6385e-03+0.0000e+00j,  0.0000e+00-1.7105e-02j],\n",
            "        [ 1.7765e-03-1.7194e-02j,  8.6201e-04+8.9065e-05j,\n",
            "         -9.8816e-01+0.0000e+00j,  0.0000e+00-1.5243e-01j],\n",
            "        [ 8.6201e-04+8.9065e-05j,  1.7765e-03-1.7194e-02j,\n",
            "          0.0000e+00-1.5243e-01j, -9.8816e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0092, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9931-1.0359e-01j,  0.0051-4.9009e-02j,  0.0000-2.5564e-02j,\n",
            "          0.0039+0.0000e+00j],\n",
            "        [ 0.0051-4.9009e-02j, -0.9931-1.0359e-01j,  0.0039+0.0000e+00j,\n",
            "          0.0000-2.5564e-02j],\n",
            "        [ 0.0027-2.5696e-02j,  0.0013+1.3229e-04j, -0.9879+0.0000e+00j,\n",
            "          0.0000-1.5260e-01j],\n",
            "        [ 0.0013+1.3229e-04j,  0.0027-2.5696e-02j,  0.0000-1.5260e-01j,\n",
            "         -0.9879+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0087, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9919-1.1189e-01j,  0.0062-5.4843e-02j,  0.0000-2.5200e-02j,\n",
            "          0.0043+0.0000e+00j],\n",
            "        [ 0.0062-5.4843e-02j, -0.9919-1.1189e-01j,  0.0043+0.0000e+00j,\n",
            "          0.0000-2.5200e-02j],\n",
            "        [ 0.0029-2.5358e-02j,  0.0014+1.5817e-04j, -0.9857+0.0000e+00j,\n",
            "          0.0000-1.6673e-01j],\n",
            "        [ 0.0014+1.5817e-04j,  0.0029-2.5358e-02j,  0.0000-1.6673e-01j,\n",
            "         -0.9857+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9901-1.2348e-01j,  0.0079-6.3657e-02j,  0.0000-1.7855e-02j,\n",
            "          0.0034+0.0000e+00j],\n",
            "        [ 0.0079-6.3657e-02j, -0.9901-1.2348e-01j,  0.0034+0.0000e+00j,\n",
            "          0.0000-1.7855e-02j],\n",
            "        [ 0.0022-1.7999e-02j,  0.0012+1.4433e-04j, -0.9822+0.0000e+00j,\n",
            "          0.0000-1.8714e-01j],\n",
            "        [ 0.0012+1.4433e-04j,  0.0022-1.7999e-02j,  0.0000-1.8714e-01j,\n",
            "         -0.9822+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8837e-01-1.3383e-01j,  9.6427e-03-7.1214e-02j,\n",
            "          0.0000e+00-6.5866e-03j,  1.3799e-03+0.0000e+00j],\n",
            "        [ 9.6427e-03-7.1214e-02j, -9.8837e-01-1.3383e-01j,\n",
            "          1.3799e-03+0.0000e+00j,  0.0000e+00-6.5866e-03j],\n",
            "        [ 9.0065e-04-6.6515e-03j,  4.7925e-04+6.4893e-05j,\n",
            "         -9.7873e-01+0.0000e+00j,  0.0000e+00-2.0504e-01j],\n",
            "        [ 4.7925e-04+6.4893e-05j,  9.0065e-04-6.6515e-03j,\n",
            "          0.0000e+00-2.0504e-01j, -9.7873e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0083, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8742e-01-1.3919e-01j,  1.0452e-02-7.4148e-02j,\n",
            "          0.0000e+00+5.2672e-03j, -1.1502e-03+0.0000e+00j],\n",
            "        [ 1.0452e-02-7.4148e-02j, -9.8742e-01-1.3919e-01j,\n",
            "         -1.1502e-03+0.0000e+00j,  0.0000e+00+5.2672e-03j],\n",
            "        [-7.5045e-04+5.3236e-03j, -3.9976e-04-5.6354e-05j,\n",
            "         -9.7696e-01+0.0000e+00j,  0.0000e+00-2.1334e-01j],\n",
            "        [-3.9976e-04-5.6354e-05j, -7.5045e-04+5.3236e-03j,\n",
            "          0.0000e+00-2.1334e-01j, -9.7696e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0084, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9876-1.3842e-01j,  0.0100-7.1558e-02j,  0.0000+1.4521e-02j,\n",
            "         -0.0031+0.0000e+00j],\n",
            "        [ 0.0100-7.1558e-02j, -0.9876-1.3842e-01j, -0.0031+0.0000e+00j,\n",
            "          0.0000+1.4521e-02j],\n",
            "        [-0.0021+1.4670e-02j, -0.0011-1.4897e-04j, -0.9776+0.0000e+00j,\n",
            "          0.0000-2.0998e-01j],\n",
            "        [-0.0011-1.4897e-04j, -0.0021+1.4670e-02j,  0.0000-2.0998e-01j,\n",
            "         -0.9776+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0082, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9888-1.3293e-01j,  0.0087-6.4910e-02j,  0.0000+1.8901e-02j,\n",
            "         -0.0038+0.0000e+00j],\n",
            "        [ 0.0087-6.4910e-02j, -0.9888-1.3293e-01j, -0.0038+0.0000e+00j,\n",
            "          0.0000+1.8901e-02j],\n",
            "        [-0.0026+1.9069e-02j, -0.0013-1.6830e-04j, -0.9800+0.0000e+00j,\n",
            "          0.0000-1.9784e-01j],\n",
            "        [-0.0013-1.6830e-04j, -0.0026+1.9069e-02j,  0.0000-1.9784e-01j,\n",
            "         -0.9800+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-0.9903-1.2550e-01j,  0.0072-5.6998e-02j,  0.0000+1.7773e-02j,\n",
            "         -0.0033+0.0000e+00j],\n",
            "        [ 0.0072-5.6998e-02j, -0.9903-1.2550e-01j, -0.0033+0.0000e+00j,\n",
            "          0.0000+1.7773e-02j],\n",
            "        [-0.0023+1.7904e-02j, -0.0010-1.3060e-04j, -0.9830+0.0000e+00j,\n",
            "          0.0000-1.8250e-01j],\n",
            "        [-0.0010-1.3060e-04j, -0.0023+1.7904e-02j,  0.0000-1.8250e-01j,\n",
            "         -0.9830+0.0000e+00j]], grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9146e-01-1.1927e-01j,  6.1332e-03-5.0981e-02j,\n",
            "          0.0000e+00+1.2066e-02j, -2.0849e-03+0.0000e+00j],\n",
            "        [ 6.1332e-03-5.0981e-02j, -9.9146e-01-1.1927e-01j,\n",
            "         -2.0849e-03+0.0000e+00j,  0.0000e+00+1.2066e-02j],\n",
            "        [-1.4606e-03+1.2141e-02j, -6.2430e-04-7.5105e-05j,\n",
            "         -9.8532e-01+0.0000e+00j,  0.0000e+00-1.7026e-01j],\n",
            "        [-6.2430e-04-7.5105e-05j, -1.4606e-03+1.2141e-02j,\n",
            "          0.0000e+00-1.7026e-01j, -9.8532e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9193e-01-1.1663e-01j,  5.7797e-03-4.9156e-02j,\n",
            "          0.0000e+00+3.7168e-03j, -6.2484e-04+0.0000e+00j],\n",
            "        [ 5.7797e-03-4.9156e-02j, -9.9193e-01-1.1663e-01j,\n",
            "         -6.2484e-04+0.0000e+00j,  0.0000e+00+3.7168e-03j],\n",
            "        [-4.3957e-04+3.7385e-03j, -1.8527e-04-2.1783e-05j,\n",
            "         -9.8615e-01+0.0000e+00j,  0.0000e+00-1.6579e-01j],\n",
            "        [-1.8527e-04-2.1783e-05j, -4.3957e-04+3.7385e-03j,\n",
            "          0.0000e+00-1.6579e-01j, -9.8615e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9161e-01-1.1814e-01j,  6.1851e-03-5.1915e-02j,\n",
            "          0.0000e+00-4.8586e-03j,  8.3844e-04+0.0000e+00j],\n",
            "        [ 6.1851e-03-5.1915e-02j, -9.9161e-01-1.1814e-01j,\n",
            "          8.3844e-04+0.0000e+00j,  0.0000e+00-4.8586e-03j],\n",
            "        [ 5.8248e-04-4.8891e-03j,  2.5596e-04+3.0495e-05j,\n",
            "         -9.8542e-01+0.0000e+00j,  0.0000e+00-1.7005e-01j],\n",
            "        [ 2.5596e-04+3.0495e-05j,  5.8248e-04-4.8891e-03j,\n",
            "          0.0000e+00-1.7005e-01j, -9.8542e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9068e-01-1.2259e-01j,  7.1604e-03-5.7865e-02j,\n",
            "          0.0000e+00-1.1319e-02j,  2.0768e-03+0.0000e+00j],\n",
            "        [ 7.1604e-03-5.7865e-02j, -9.9068e-01-1.2259e-01j,\n",
            "          2.0768e-03+0.0000e+00j,  0.0000e+00-1.1319e-02j],\n",
            "        [ 1.4109e-03-1.1401e-02j,  6.6595e-04+8.2407e-05j,\n",
            "         -9.8352e-01+0.0000e+00j,  0.0000e+00-1.8045e-01j],\n",
            "        [ 6.6595e-04+8.2407e-05j,  1.4109e-03-1.1401e-02j,\n",
            "          0.0000e+00-1.8045e-01j, -9.8352e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8957e-01-1.2773e-01j,  8.3371e-03-6.4592e-02j,\n",
            "          0.0000e+00-1.4084e-02j,  2.7604e-03+0.0000e+00j],\n",
            "        [ 8.3371e-03-6.4592e-02j, -9.8957e-01-1.2773e-01j,\n",
            "          2.7604e-03+0.0000e+00j,  0.0000e+00-1.4084e-02j],\n",
            "        [ 1.8333e-03-1.4204e-02j,  9.2710e-04+1.1966e-04j,\n",
            "         -9.8123e-01+0.0000e+00j,  0.0000e+00-1.9232e-01j],\n",
            "        [ 9.2710e-04+1.1966e-04j,  1.8333e-03-1.4204e-02j,\n",
            "          0.0000e+00-1.9232e-01j, -9.8123e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0081, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8879e-01-1.3116e-01j,  9.2264e-03-6.9555e-02j,\n",
            "          0.0000e+00-1.2783e-02j,  2.6192e-03+0.0000e+00j],\n",
            "        [ 9.2264e-03-6.9555e-02j, -9.8879e-01-1.3116e-01j,\n",
            "          2.6192e-03+0.0000e+00j,  0.0000e+00-1.2783e-02j],\n",
            "        [ 1.7116e-03-1.2903e-02j,  9.0766e-04+1.2040e-04j,\n",
            "         -9.7956e-01+0.0000e+00j,  0.0000e+00-2.0072e-01j],\n",
            "        [ 9.0766e-04+1.2040e-04j,  1.7116e-03-1.2903e-02j,\n",
            "          0.0000e+00-2.0072e-01j, -9.7956e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8870e-01-1.3139e-01j,  9.4482e-03-7.1096e-02j,\n",
            "          0.0000e+00-8.1794e-03j,  1.6913e-03+0.0000e+00j],\n",
            "        [ 9.4482e-03-7.1096e-02j, -9.8870e-01-1.3139e-01j,\n",
            "          1.6913e-03+0.0000e+00j,  0.0000e+00-8.1794e-03j],\n",
            "        [ 1.0975e-03-8.2583e-03j,  5.9385e-04+7.8918e-05j,\n",
            "         -9.7925e-01+0.0000e+00j,  0.0000e+00-2.0249e-01j],\n",
            "        [ 5.9385e-04+7.8918e-05j,  1.0975e-03-8.2583e-03j,\n",
            "          0.0000e+00-2.0249e-01j, -9.7925e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8927e-01-1.2840e-01j,  8.9663e-03-6.9084e-02j,\n",
            "          0.0000e+00-1.7831e-03j,  3.5920e-04+0.0000e+00j],\n",
            "        [ 8.9663e-03-6.9084e-02j, -9.8927e-01-1.2840e-01j,\n",
            "          3.5920e-04+0.0000e+00j,  0.0000e+00-1.7831e-03j],\n",
            "        [ 2.3354e-04-1.7994e-03j,  1.2566e-04+1.6309e-05j,\n",
            "         -9.8030e-01+0.0000e+00j,  0.0000e+00-1.9748e-01j],\n",
            "        [ 1.2566e-04+1.6309e-05j,  2.3354e-04-1.7994e-03j,\n",
            "          0.0000e+00-1.9748e-01j, -9.8030e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9018e-01-1.2351e-01j,  8.0804e-03-6.4778e-02j,\n",
            "          0.0000e+00+4.5491e-03j, -8.7217e-04+0.0000e+00j],\n",
            "        [ 8.0804e-03-6.4778e-02j, -9.9018e-01-1.2351e-01j,\n",
            "         -8.7217e-04+0.0000e+00j,  0.0000e+00+4.5491e-03j],\n",
            "        [-5.7212e-04+4.5865e-03j, -3.0005e-04-3.7428e-05j,\n",
            "         -9.8210e-01+0.0000e+00j,  0.0000e+00-1.8829e-01j],\n",
            "        [-3.0005e-04-3.7428e-05j, -5.7212e-04+4.5865e-03j,\n",
            "          0.0000e+00-1.8829e-01j, -9.8210e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9102e-01-1.1882e-01j,  7.2178e-03-6.0200e-02j,\n",
            "          0.0000e+00+9.0642e-03j, -1.6494e-03+0.0000e+00j],\n",
            "        [ 7.2178e-03-6.0200e-02j, -9.9102e-01-1.1882e-01j,\n",
            "         -1.6494e-03+0.0000e+00j,  0.0000e+00+9.0642e-03j],\n",
            "        [-1.0947e-03+9.1307e-03j, -5.5465e-04-6.6500e-05j,\n",
            "         -9.8380e-01+0.0000e+00j,  0.0000e+00-1.7902e-01j],\n",
            "        [-5.5465e-04-6.6500e-05j, -1.0947e-03+9.1307e-03j,\n",
            "          0.0000e+00-1.7902e-01j, -9.8380e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9148e-01-1.1627e-01j,  6.7201e-03-5.7306e-02j,\n",
            "          0.0000e+00+1.0620e-02j, -1.8718e-03+0.0000e+00j],\n",
            "        [ 6.7201e-03-5.7306e-02j, -9.9148e-01-1.1627e-01j,\n",
            "         -1.8718e-03+0.0000e+00j,  0.0000e+00+1.0620e-02j],\n",
            "        [-1.2538e-03+1.0692e-02j, -6.1799e-04-7.2470e-05j,\n",
            "         -9.8476e-01+0.0000e+00j,  0.0000e+00-1.7357e-01j],\n",
            "        [-6.1799e-04-7.2470e-05j, -1.2538e-03+1.0692e-02j,\n",
            "          0.0000e+00-1.7357e-01j, -9.8476e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0080, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9144e-01-1.1684e-01j,  6.7336e-03-5.7139e-02j,\n",
            "          0.0000e+00+9.0226e-03j, -1.5941e-03+0.0000e+00j],\n",
            "        [ 6.7336e-03-5.7139e-02j, -9.9144e-01-1.1684e-01j,\n",
            "         -1.5941e-03+0.0000e+00j,  0.0000e+00+9.0226e-03j],\n",
            "        [-1.0705e-03+9.0843e-03j, -5.2355e-04-6.1698e-05j,\n",
            "         -9.8471e-01+0.0000e+00j,  0.0000e+00-1.7398e-01j],\n",
            "        [-5.2355e-04-6.1698e-05j, -1.0705e-03+9.0843e-03j,\n",
            "          0.0000e+00-1.7398e-01j, -9.8471e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9094e-01-1.2013e-01j,  7.2053e-03-5.9434e-02j,\n",
            "          0.0000e+00+5.0022e-03j, -9.1308e-04+0.0000e+00j],\n",
            "        [ 7.2053e-03-5.9434e-02j, -9.9094e-01-1.2013e-01j,\n",
            "         -9.1308e-04+0.0000e+00j,  0.0000e+00+5.0022e-03j],\n",
            "        [-6.1086e-04+5.0388e-03j, -3.0222e-04-3.6638e-05j,\n",
            "         -9.8373e-01+0.0000e+00j,  0.0000e+00-1.7957e-01j],\n",
            "        [-3.0222e-04-3.6638e-05j, -6.1086e-04+5.0388e-03j,\n",
            "          0.0000e+00-1.7957e-01j, -9.8373e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9017e-01-1.2468e-01j,  7.9155e-03-6.2861e-02j,\n",
            "          0.0000e+00-8.6474e-05j,  1.6511e-05+0.0000e+00j],\n",
            "        [ 7.9155e-03-6.2861e-02j, -9.9017e-01-1.2468e-01j,\n",
            "          1.6511e-05+0.0000e+00j,  0.0000e+00-8.6474e-05j],\n",
            "        [ 1.0977e-05-8.7171e-05j,  5.5341e-06+6.9685e-07j,\n",
            "         -9.8226e-01+0.0000e+00j,  0.0000e+00-1.8754e-01j],\n",
            "        [ 5.5341e-06+6.9685e-07j,  1.0977e-05-8.7171e-05j,\n",
            "          0.0000e+00-1.8754e-01j, -9.8226e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8947e-01-1.2860e-01j,  8.5365e-03-6.5683e-02j,\n",
            "          0.0000e+00-4.6840e-03j,  9.2769e-04+0.0000e+00j],\n",
            "        [ 8.5365e-03-6.5683e-02j, -9.8947e-01-1.2860e-01j,\n",
            "          9.2769e-04+0.0000e+00j,  0.0000e+00-4.6840e-03j],\n",
            "        [ 6.1406e-04-4.7248e-03j,  3.1364e-04+4.0762e-05j,\n",
            "         -9.8093e-01+0.0000e+00j,  0.0000e+00-1.9428e-01j],\n",
            "        [ 3.1364e-04+4.0762e-05j,  6.1406e-04-4.7248e-03j,\n",
            "          0.0000e+00-1.9428e-01j, -9.8093e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8916e-01-1.3039e-01j,  8.7725e-03-6.6549e-02j,\n",
            "          0.0000e+00-7.4846e-03j,  1.5035e-03+0.0000e+00j],\n",
            "        [ 8.7725e-03-6.6549e-02j, -9.8916e-01-1.3039e-01j,\n",
            "          1.5035e-03+0.0000e+00j,  0.0000e+00-7.4846e-03j],\n",
            "        [ 9.9544e-04-7.5515e-03j,  5.0805e-04+6.6972e-05j,\n",
            "         -9.8039e-01+0.0000e+00j,  0.0000e+00-1.9694e-01j],\n",
            "        [ 5.0805e-04+6.6972e-05j,  9.9544e-04-7.5515e-03j,\n",
            "          0.0000e+00-1.9694e-01j, -9.8039e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8936e-01-1.2961e-01j,  8.5286e-03-6.5103e-02j,\n",
            "          0.0000e+00-7.8105e-03j,  1.5505e-03+0.0000e+00j],\n",
            "        [ 8.5286e-03-6.5103e-02j, -9.8936e-01-1.2961e-01j,\n",
            "          1.5505e-03+0.0000e+00j,  0.0000e+00-7.8105e-03j],\n",
            "        [ 1.0321e-03-7.8784e-03j,  5.1843e-04+6.7915e-05j,\n",
            "         -9.8083e-01+0.0000e+00j,  0.0000e+00-1.9471e-01j],\n",
            "        [ 5.1843e-04+6.7915e-05j,  1.0321e-03-7.8784e-03j,\n",
            "          0.0000e+00-1.9471e-01j, -9.8083e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8992e-01-1.2693e-01j,  7.9600e-03-6.2079e-02j,\n",
            "          0.0000e+00-5.7688e-03j,  1.1104e-03+0.0000e+00j],\n",
            "        [ 7.9600e-03-6.2079e-02j, -9.8992e-01-1.2693e-01j,\n",
            "          1.1104e-03+0.0000e+00j,  0.0000e+00-5.7688e-03j],\n",
            "        [ 7.4570e-04-5.8156e-03j,  3.6470e-04+4.6763e-05j,\n",
            "         -9.8196e-01+0.0000e+00j,  0.0000e+00-1.8901e-01j],\n",
            "        [ 3.6470e-04+4.6763e-05j,  7.4570e-04-5.8156e-03j,\n",
            "          0.0000e+00-1.8901e-01j, -9.8196e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9053e-01-1.2379e-01j,  7.3618e-03-5.8909e-02j,\n",
            "          0.0000e+00-2.1602e-03j,  4.0141e-04+0.0000e+00j],\n",
            "        [ 7.3618e-03-5.8909e-02j, -9.9053e-01-1.2379e-01j,\n",
            "          4.0141e-04+0.0000e+00j,  0.0000e+00-2.1602e-03j],\n",
            "        [ 2.7198e-04-2.1764e-03j,  1.2943e-04+1.6175e-05j,\n",
            "         -9.8317e-01+0.0000e+00j,  0.0000e+00-1.8269e-01j],\n",
            "        [ 1.2943e-04+1.6175e-05j,  2.7198e-04-2.1764e-03j,\n",
            "          0.0000e+00-1.8269e-01j, -9.8317e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9090e-01-1.2166e-01j,  7.0052e-03-5.7057e-02j,\n",
            "          0.0000e+00+1.7946e-03j, -3.2597e-04+0.0000e+00j],\n",
            "        [ 7.0052e-03-5.7057e-02j, -9.9090e-01-1.2166e-01j,\n",
            "         -3.2597e-04+0.0000e+00j,  0.0000e+00+1.7946e-03j],\n",
            "        [-2.2190e-04+1.8074e-03j, -1.0407e-04-1.2777e-05j,\n",
            "         -9.8390e-01+0.0000e+00j,  0.0000e+00-1.7872e-01j],\n",
            "        [-1.0407e-04-1.2777e-05j, -2.2190e-04+1.8074e-03j,\n",
            "          0.0000e+00-1.7872e-01j, -9.8390e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0079, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9091e-01-1.2142e-01j,  7.0230e-03-5.7317e-02j,\n",
            "          0.0000e+00+4.8402e-03j, -8.7928e-04+0.0000e+00j],\n",
            "        [ 7.0230e-03-5.7317e-02j, -9.9091e-01-1.2142e-01j,\n",
            "         -8.7928e-04+0.0000e+00j,  0.0000e+00+4.8402e-03j],\n",
            "        [-5.9731e-04+4.8748e-03j, -2.8197e-04-3.4550e-05j,\n",
            "         -9.8388e-01+0.0000e+00j,  0.0000e+00-1.7873e-01j],\n",
            "        [-2.8197e-04-3.4550e-05j, -5.9731e-04+4.8748e-03j,\n",
            "          0.0000e+00-1.7873e-01j, -9.8388e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9059e-01-1.2292e-01j,  7.3802e-03-5.9474e-02j,\n",
            "          0.0000e+00+6.0907e-03j, -1.1299e-03+0.0000e+00j],\n",
            "        [ 7.3802e-03-5.9474e-02j, -9.9059e-01-1.2292e-01j,\n",
            "         -1.1299e-03+0.0000e+00j,  0.0000e+00+6.0907e-03j],\n",
            "        [-7.6147e-04+6.1364e-03j, -3.6842e-04-4.5718e-05j,\n",
            "         -9.8321e-01+0.0000e+00j,  0.0000e+00-1.8240e-01j],\n",
            "        [-3.6842e-04-4.5718e-05j, -7.6147e-04+6.1364e-03j,\n",
            "          0.0000e+00-1.8240e-01j, -9.8321e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9012e-01-1.2520e-01j,  7.8977e-03-6.2459e-02j,\n",
            "          0.0000e+00+5.2992e-03j, -1.0124e-03+0.0000e+00j],\n",
            "        [ 7.8977e-03-6.2459e-02j, -9.9012e-01-1.2520e-01j,\n",
            "         -1.0124e-03+0.0000e+00j,  0.0000e+00+5.2992e-03j],\n",
            "        [-6.7545e-04+5.3418e-03j, -3.3697e-04-4.2609e-05j,\n",
            "         -9.8222e-01+0.0000e+00j,  0.0000e+00-1.8766e-01j],\n",
            "        [-3.3697e-04-4.2609e-05j, -6.7545e-04+5.3418e-03j,\n",
            "          0.0000e+00-1.8766e-01j, -9.8222e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8974e-01-1.2695e-01j,  8.3240e-03-6.4897e-02j,\n",
            "          0.0000e+00+2.8926e-03j, -5.6543e-04+0.0000e+00j],\n",
            "        [ 8.3240e-03-6.4897e-02j, -9.8974e-01-1.2695e-01j,\n",
            "         -5.6543e-04+0.0000e+00j,  0.0000e+00+2.8926e-03j],\n",
            "        [-3.7416e-04+2.9171e-03j, -1.9127e-04-2.4533e-05j,\n",
            "         -9.8142e-01+0.0000e+00j,  0.0000e+00-1.9185e-01j],\n",
            "        [-1.9127e-04-2.4533e-05j, -3.7416e-04+2.9171e-03j,\n",
            "          0.0000e+00-1.9185e-01j, -9.8142e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8965e-01-1.2724e-01j,  8.4555e-03-6.5765e-02j,\n",
            "          0.0000e+00-2.2610e-04j,  4.4475e-05+0.0000e+00j],\n",
            "        [ 8.4555e-03-6.5765e-02j, -9.8965e-01-1.2724e-01j,\n",
            "          4.4475e-05+0.0000e+00j,  0.0000e+00-2.2610e-04j],\n",
            "        [ 2.9320e-05-2.2805e-04j,  1.5154e-05+1.9484e-06j,\n",
            "         -9.8120e-01+0.0000e+00j,  0.0000e+00-1.9301e-01j],\n",
            "        [ 1.5154e-05+1.9484e-06j,  2.9320e-05-2.2805e-04j,\n",
            "          0.0000e+00-1.9301e-01j, -9.8120e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8988e-01-1.2593e-01j,  8.2524e-03-6.4867e-02j,\n",
            "          0.0000e+00-2.9899e-03j,  5.8116e-04+0.0000e+00j],\n",
            "        [ 8.2524e-03-6.4867e-02j, -9.8988e-01-1.2593e-01j,\n",
            "          5.8116e-04+0.0000e+00j,  0.0000e+00-2.9899e-03j],\n",
            "        [ 3.8358e-04-3.0151e-03j,  1.9758e-04+2.5136e-05j,\n",
            "         -9.8162e-01+0.0000e+00j,  0.0000e+00-1.9080e-01j],\n",
            "        [ 1.9758e-04+2.5136e-05j,  3.8358e-04-3.0151e-03j,\n",
            "          0.0000e+00-1.9080e-01j, -9.8162e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9028e-01-1.2372e-01j,  7.8525e-03-6.2853e-02j,\n",
            "          0.0000e+00-4.5218e-03j,  8.5874e-04+0.0000e+00j],\n",
            "        [ 7.8525e-03-6.2853e-02j, -9.9028e-01-1.2372e-01j,\n",
            "          8.5874e-04+0.0000e+00j,  0.0000e+00-4.5218e-03j],\n",
            "        [ 5.6945e-04-4.5580e-03j,  2.8929e-04+3.6143e-05j,\n",
            "         -9.8243e-01+0.0000e+00j,  0.0000e+00-1.8657e-01j],\n",
            "        [ 2.8929e-04+3.6143e-05j,  5.6945e-04-4.5580e-03j,\n",
            "          0.0000e+00-1.8657e-01j, -9.8243e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9066e-01-1.2175e-01j,  7.4776e-03-6.0845e-02j,\n",
            "          0.0000e+00-4.4110e-03j,  8.1920e-04+0.0000e+00j],\n",
            "        [ 7.4776e-03-6.0845e-02j, -9.9066e-01-1.2175e-01j,\n",
            "          8.1920e-04+0.0000e+00j,  0.0000e+00-4.4110e-03j],\n",
            "        [ 5.4621e-04-4.4446e-03j,  2.7298e-04+3.3548e-05j,\n",
            "         -9.8318e-01+0.0000e+00j,  0.0000e+00-1.8259e-01j],\n",
            "        [ 2.7298e-04+3.3548e-05j,  5.4621e-04-4.4446e-03j,\n",
            "          0.0000e+00-1.8259e-01j, -9.8318e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9082e-01-1.2100e-01j,  7.3083e-03-5.9847e-02j,\n",
            "          0.0000e+00-2.8268e-03j,  5.1978e-04+0.0000e+00j],\n",
            "        [ 7.3083e-03-5.9847e-02j, -9.9082e-01-1.2100e-01j,\n",
            "          5.1978e-04+0.0000e+00j,  0.0000e+00-2.8268e-03j],\n",
            "        [ 3.4777e-04-2.8478e-03j,  1.7201e-04+2.1006e-05j,\n",
            "         -9.8351e-01+0.0000e+00j,  0.0000e+00-1.8084e-01j],\n",
            "        [ 1.7201e-04+2.1006e-05j,  3.4777e-04-2.8478e-03j,\n",
            "          0.0000e+00-1.8084e-01j, -9.8351e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9070e-01-1.2180e-01j,  7.4063e-03-6.0240e-02j,\n",
            "          0.0000e+00-4.2644e-04j,  7.8949e-05+0.0000e+00j],\n",
            "        [ 7.4063e-03-6.0240e-02j, -9.9070e-01-1.2180e-01j,\n",
            "          7.8949e-05+0.0000e+00j,  0.0000e+00-4.2644e-04j],\n",
            "        [ 5.2824e-05-4.2965e-04j,  2.6125e-05+3.2120e-06j,\n",
            "         -9.8329e-01+0.0000e+00j,  0.0000e+00-1.8204e-01j],\n",
            "        [ 2.6125e-05+3.2120e-06j,  5.2824e-05-4.2965e-04j,\n",
            "          0.0000e+00-1.8204e-01j, -9.8329e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9037e-01-1.2371e-01j,  7.6992e-03-6.1638e-02j,\n",
            "          0.0000e+00+1.9006e-03j, -3.5848e-04+0.0000e+00j],\n",
            "        [ 7.6992e-03-6.1638e-02j, -9.9037e-01-1.2371e-01j,\n",
            "         -3.5848e-04+0.0000e+00j,  0.0000e+00+1.9006e-03j],\n",
            "        [-2.3926e-04+1.9155e-03j, -1.1922e-04-1.4891e-05j,\n",
            "         -9.8267e-01+0.0000e+00j,  0.0000e+00-1.8534e-01j],\n",
            "        [-1.1922e-04-1.4891e-05j, -2.3926e-04+1.9155e-03j,\n",
            "          0.0000e+00-1.8534e-01j, -9.8267e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9001e-01-1.2573e-01j,  8.0199e-03-6.3149e-02j,\n",
            "          0.0000e+00+3.3557e-03j, -6.4546e-04+0.0000e+00j],\n",
            "        [ 8.0199e-03-6.3149e-02j, -9.9001e-01-1.2573e-01j,\n",
            "         -6.4546e-04+0.0000e+00j,  0.0000e+00+3.3557e-03j],\n",
            "        [-4.2966e-04+3.3831e-03j, -2.1580e-04-2.7406e-05j,\n",
            "         -9.8199e-01+0.0000e+00j,  0.0000e+00-1.8888e-01j],\n",
            "        [-2.1580e-04-2.7406e-05j, -4.2966e-04+3.3831e-03j,\n",
            "          0.0000e+00-1.8888e-01j, -9.8199e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8981e-01-1.2691e-01j,  8.1912e-03-6.3884e-02j,\n",
            "          0.0000e+00+3.5053e-03j, -6.8131e-04+0.0000e+00j],\n",
            "        [ 8.1912e-03-6.3884e-02j, -9.8981e-01-1.2691e-01j,\n",
            "         -6.8131e-04+0.0000e+00j,  0.0000e+00+3.5053e-03j],\n",
            "        [-4.5319e-04+3.5345e-03j, -2.2812e-04-2.9250e-05j,\n",
            "         -9.8162e-01+0.0000e+00j,  0.0000e+00-1.9080e-01j],\n",
            "        [-2.2812e-04-2.9250e-05j, -4.5319e-04+3.5345e-03j,\n",
            "          0.0000e+00-1.9080e-01j, -9.8162e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.8986e-01-1.2679e-01j,  8.1263e-03-6.3443e-02j,\n",
            "          0.0000e+00+2.4065e-03j, -4.6632e-04+0.0000e+00j],\n",
            "        [ 8.1263e-03-6.3443e-02j, -9.8986e-01-1.2679e-01j,\n",
            "         -4.6632e-04+0.0000e+00j,  0.0000e+00+2.4065e-03j],\n",
            "        [-3.1080e-04+2.4265e-03j, -1.5552e-04-1.9920e-05j,\n",
            "         -9.8174e-01+0.0000e+00j,  0.0000e+00-1.9023e-01j],\n",
            "        [-1.5552e-04-1.9920e-05j, -3.1080e-04+2.4265e-03j,\n",
            "          0.0000e+00-1.9023e-01j, -9.8174e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9010e-01-1.2560e-01j,  7.8780e-03-6.2101e-02j,\n",
            "          0.0000e+00+5.5229e-04j, -1.0554e-04+0.0000e+00j],\n",
            "        [ 7.8780e-03-6.2101e-02j, -9.9010e-01-1.2560e-01j,\n",
            "         -1.0554e-04+0.0000e+00j,  0.0000e+00+5.5229e-04j],\n",
            "        [-7.0624e-05+5.5672e-04j, -3.4918e-05-4.4297e-06j,\n",
            "         -9.8222e-01+0.0000e+00j,  0.0000e+00-1.8770e-01j],\n",
            "        [-3.4918e-05-4.4297e-06j, -7.0624e-05+5.5672e-04j,\n",
            "          0.0000e+00-1.8770e-01j, -9.8222e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9038e-01-1.2411e-01j,  7.5974e-03-6.0624e-02j,\n",
            "          0.0000e+00-1.3327e-03j,  2.5051e-04+0.0000e+00j],\n",
            "        [ 7.5974e-03-6.0624e-02j, -9.9038e-01-1.2411e-01j,\n",
            "          2.5051e-04+0.0000e+00j,  0.0000e+00-1.3327e-03j],\n",
            "        [ 1.6830e-04-1.3430e-03j,  8.2207e-05+1.0302e-05j,\n",
            "         -9.8279e-01+0.0000e+00j,  0.0000e+00-1.8474e-01j],\n",
            "        [ 8.2207e-05+1.0302e-05j,  1.6830e-04-1.3430e-03j,\n",
            "          0.0000e+00-1.8474e-01j, -9.8279e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9055e-01-1.2316e-01j,  7.4385e-03-5.9827e-02j,\n",
            "          0.0000e+00-2.5631e-03j,  4.7707e-04+0.0000e+00j],\n",
            "        [ 7.4385e-03-5.9827e-02j, -9.9055e-01-1.2316e-01j,\n",
            "          4.7707e-04+0.0000e+00j,  0.0000e+00-2.5631e-03j],\n",
            "        [ 3.2109e-04-2.5825e-03j,  1.5598e-04+1.9393e-05j,\n",
            "         -9.8311e-01+0.0000e+00j,  0.0000e+00-1.8299e-01j],\n",
            "        [ 1.5598e-04+1.9393e-05j,  3.2109e-04-2.5825e-03j,\n",
            "          0.0000e+00-1.8299e-01j, -9.8311e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9053e-01-1.2318e-01j,  7.4763e-03-6.0118e-02j,\n",
            "          0.0000e+00-2.7422e-03j,  5.1131e-04+0.0000e+00j],\n",
            "        [ 7.4763e-03-6.0118e-02j, -9.9053e-01-1.2318e-01j,\n",
            "          5.1131e-04+0.0000e+00j,  0.0000e+00-2.7422e-03j],\n",
            "        [ 3.4362e-04-2.7630e-03j,  1.6769e-04+2.0855e-05j,\n",
            "         -9.8305e-01+0.0000e+00j,  0.0000e+00-1.8330e-01j],\n",
            "        [ 1.6769e-04+2.0855e-05j,  3.4362e-04-2.7630e-03j,\n",
            "          0.0000e+00-1.8330e-01j, -9.8305e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9035e-01-1.2404e-01j,  7.6767e-03-6.1294e-02j,\n",
            "          0.0000e+00-1.8918e-03j,  3.5678e-04+0.0000e+00j],\n",
            "        [ 7.6767e-03-6.1294e-02j, -9.9035e-01-1.2404e-01j,\n",
            "          3.5678e-04+0.0000e+00j,  0.0000e+00-1.8918e-03j],\n",
            "        [ 2.3879e-04-1.9066e-03j,  1.1800e-04+1.4779e-05j,\n",
            "         -9.8267e-01+0.0000e+00j,  0.0000e+00-1.8533e-01j],\n",
            "        [ 1.1800e-04+1.4779e-05j,  2.3879e-04-1.9066e-03j,\n",
            "          0.0000e+00-1.8533e-01j, -9.8267e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9013e-01-1.2509e-01j,  7.9197e-03-6.2686e-02j,\n",
            "          0.0000e+00-4.1622e-04j,  7.9573e-05+0.0000e+00j],\n",
            "        [ 7.9197e-03-6.2686e-02j, -9.9013e-01-1.2509e-01j,\n",
            "          7.9573e-05+0.0000e+00j,  0.0000e+00-4.1622e-04j],\n",
            "        [ 5.3009e-05-4.1958e-04j,  2.6564e-05+3.3560e-06j,\n",
            "         -9.8221e-01+0.0000e+00j,  0.0000e+00-1.8778e-01j],\n",
            "        [ 2.6564e-05+3.3560e-06j,  5.3009e-05-4.1958e-04j,\n",
            "          0.0000e+00-1.8778e-01j, -9.8221e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9000e-01-1.2567e-01j,  8.0678e-03-6.3558e-02j,\n",
            "          0.0000e+00+1.0784e-03j, -2.0781e-04+0.0000e+00j],\n",
            "        [ 8.0678e-03-6.3558e-02j, -9.9000e-01-1.2567e-01j,\n",
            "         -2.0781e-04+0.0000e+00j,  0.0000e+00+1.0784e-03j],\n",
            "        [-1.3801e-04+1.0872e-03j, -6.9801e-05-8.8602e-06j,\n",
            "         -9.8193e-01+0.0000e+00j,  0.0000e+00-1.8922e-01j],\n",
            "        [-6.9801e-05-8.8602e-06j, -1.3801e-04+1.0872e-03j,\n",
            "          0.0000e+00-1.8922e-01j, -9.8193e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9004e-01-1.2540e-01j,  8.0454e-03-6.3518e-02j,\n",
            "          0.0000e+00+2.0273e-03j, -3.9003e-04+0.0000e+00j],\n",
            "        [ 8.0454e-03-6.3518e-02j, -9.9004e-01-1.2540e-01j,\n",
            "         -3.9003e-04+0.0000e+00j,  0.0000e+00+2.0273e-03j],\n",
            "        [-2.5889e-04+2.0440e-03j, -1.3113e-04-1.6610e-05j,\n",
            "         -9.8199e-01+0.0000e+00j,  0.0000e+00-1.8892e-01j],\n",
            "        [-1.3113e-04-1.6610e-05j, -2.5889e-04+2.0440e-03j,\n",
            "          0.0000e+00-1.8892e-01j, -9.8199e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9021e-01-1.2447e-01j,  7.8825e-03-6.2707e-02j,\n",
            "          0.0000e+00+2.1147e-03j, -4.0294e-04+0.0000e+00j],\n",
            "        [ 7.8825e-03-6.2707e-02j, -9.9021e-01-1.2447e-01j,\n",
            "         -4.0294e-04+0.0000e+00j,  0.0000e+00+2.1147e-03j],\n",
            "        [-2.6795e-04+2.1316e-03j, -1.3499e-04-1.6969e-05j,\n",
            "         -9.8232e-01+0.0000e+00j,  0.0000e+00-1.8718e-01j],\n",
            "        [-1.3499e-04-1.6969e-05j, -2.6795e-04+2.1316e-03j,\n",
            "          0.0000e+00-1.8718e-01j, -9.8232e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9040e-01-1.2344e-01j,  7.6879e-03-6.1681e-02j,\n",
            "          0.0000e+00+1.3797e-03j, -2.5991e-04+0.0000e+00j],\n",
            "        [ 7.6879e-03-6.1681e-02j, -9.9040e-01-1.2344e-01j,\n",
            "         -2.5991e-04+0.0000e+00j,  0.0000e+00+1.3797e-03j],\n",
            "        [-1.7331e-04+1.3905e-03j, -8.6598e-05-1.0793e-05j,\n",
            "         -9.8271e-01+0.0000e+00j,  0.0000e+00-1.8512e-01j],\n",
            "        [-8.6598e-05-1.0793e-05j, -1.7331e-04+1.3905e-03j,\n",
            "          0.0000e+00-1.8512e-01j, -9.8271e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9051e-01-1.2292e-01j,  7.5769e-03-6.1054e-02j,\n",
            "          0.0000e+00+1.7611e-04j, -3.2964e-05+0.0000e+00j],\n",
            "        [ 7.5769e-03-6.1054e-02j, -9.9051e-01-1.2292e-01j,\n",
            "         -3.2964e-05+0.0000e+00j,  0.0000e+00+1.7611e-04j],\n",
            "        [-2.2025e-05+1.7747e-04j, -1.0939e-05-1.3576e-06j,\n",
            "         -9.8293e-01+0.0000e+00j,  0.0000e+00-1.8398e-01j],\n",
            "        [-1.0939e-05-1.3576e-06j, -2.2025e-05+1.7747e-04j,\n",
            "          0.0000e+00-1.8398e-01j, -9.8293e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9047e-01-1.2320e-01j,  7.6049e-03-6.1138e-02j,\n",
            "          0.0000e+00-9.8508e-04j,  1.8476e-04+0.0000e+00j],\n",
            "        [ 7.6049e-03-6.1138e-02j, -9.9047e-01-1.2320e-01j,\n",
            "          1.8476e-04+0.0000e+00j,  0.0000e+00-9.8508e-04j],\n",
            "        [ 1.2348e-04-9.9270e-04j,  6.1275e-05+7.6221e-06j,\n",
            "         -9.8286e-01+0.0000e+00j,  0.0000e+00-1.8434e-01j],\n",
            "        [ 6.1275e-05+7.6221e-06j,  1.2348e-04-9.9270e-04j,\n",
            "          0.0000e+00-1.8434e-01j, -9.8286e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9031e-01-1.2409e-01j,  7.7421e-03-6.1784e-02j,\n",
            "          0.0000e+00-1.6492e-03j,  3.1200e-04+0.0000e+00j],\n",
            "        [ 7.7421e-03-6.1784e-02j, -9.9031e-01-1.2409e-01j,\n",
            "          3.1200e-04+0.0000e+00j,  0.0000e+00-1.6492e-03j],\n",
            "        [ 2.0829e-04-1.6622e-03j,  1.0371e-04+1.2995e-05j,\n",
            "         -9.8257e-01+0.0000e+00j,  0.0000e+00-1.8588e-01j],\n",
            "        [ 1.0371e-04+1.2995e-05j,  2.0829e-04-1.6622e-03j,\n",
            "          0.0000e+00-1.8588e-01j, -9.8257e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9014e-01-1.2507e-01j,  7.8961e-03-6.2512e-02j,\n",
            "          0.0000e+00-1.5953e-03j,  3.0466e-04+0.0000e+00j],\n",
            "        [ 7.8961e-03-6.2512e-02j, -9.9014e-01-1.2507e-01j,\n",
            "          3.0466e-04+0.0000e+00j,  0.0000e+00-1.5953e-03j],\n",
            "        [ 2.0313e-04-1.6081e-03j,  1.0153e-04+1.2824e-05j,\n",
            "         -9.8225e-01+0.0000e+00j,  0.0000e+00-1.8758e-01j],\n",
            "        [ 1.0153e-04+1.2824e-05j,  2.0313e-04-1.6081e-03j,\n",
            "          0.0000e+00-1.8758e-01j, -9.8225e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9006e-01-1.2559e-01j,  7.9697e-03-6.2827e-02j,\n",
            "          0.0000e+00-9.0741e-04j,  1.7409e-04+0.0000e+00j],\n",
            "        [ 7.9697e-03-6.2827e-02j, -9.9006e-01-1.2559e-01j,\n",
            "          1.7409e-04+0.0000e+00j,  0.0000e+00-9.0741e-04j],\n",
            "        [ 1.1604e-04-9.1478e-04j,  5.8050e-05+7.3637e-06j,\n",
            "         -9.8209e-01+0.0000e+00j,  0.0000e+00-1.8842e-01j],\n",
            "        [ 5.8050e-05+7.3637e-06j,  1.1604e-04-9.1478e-04j,\n",
            "          0.0000e+00-1.8842e-01j, -9.8209e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9010e-01-1.2543e-01j,  7.9224e-03-6.2536e-02j,\n",
            "          0.0000e+00+8.3218e-05j, -1.5926e-05+0.0000e+00j],\n",
            "        [ 7.9224e-03-6.2536e-02j, -9.9010e-01-1.2543e-01j,\n",
            "         -1.5926e-05+0.0000e+00j,  0.0000e+00+8.3218e-05j],\n",
            "        [-1.0627e-05+8.3889e-05j, -5.2986e-06-6.7125e-07j,\n",
            "         -9.8217e-01+0.0000e+00j,  0.0000e+00-1.8797e-01j],\n",
            "        [-5.2986e-06-6.7125e-07j, -1.0627e-05+8.3889e-05j,\n",
            "          0.0000e+00-1.8797e-01j, -9.8217e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9022e-01-1.2478e-01j,  7.7925e-03-6.1839e-02j,\n",
            "          0.0000e+00+9.4781e-04j, -1.8004e-04+0.0000e+00j],\n",
            "        [ 7.7925e-03-6.1839e-02j, -9.9022e-01-1.2478e-01j,\n",
            "         -1.8004e-04+0.0000e+00j,  0.0000e+00+9.4781e-04j],\n",
            "        [-1.2038e-04+9.5533e-04j, -5.9660e-05-7.5179e-06j,\n",
            "         -9.8243e-01+0.0000e+00j,  0.0000e+00-1.8662e-01j],\n",
            "        [-5.9660e-05-7.5179e-06j, -1.2038e-04+9.5533e-04j,\n",
            "          0.0000e+00-1.8662e-01j, -9.8243e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9035e-01-1.2409e-01j,  7.6672e-03-6.1190e-02j,\n",
            "          0.0000e+00+1.3439e-03j, -2.5339e-04+0.0000e+00j],\n",
            "        [ 7.6672e-03-6.1190e-02j, -9.9035e-01-1.2409e-01j,\n",
            "         -2.5339e-04+0.0000e+00j,  0.0000e+00+1.3439e-03j],\n",
            "        [-1.6971e-04+1.3544e-03j, -8.3681e-05-1.0485e-05j,\n",
            "         -9.8268e-01+0.0000e+00j,  0.0000e+00-1.8528e-01j],\n",
            "        [-8.3681e-05-1.0485e-05j, -1.6971e-04+1.3544e-03j,\n",
            "          0.0000e+00-1.8528e-01j, -9.8268e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9040e-01-1.2379e-01j,  7.6235e-03-6.0993e-02j,\n",
            "          0.0000e+00+1.1471e-03j, -2.1568e-04+0.0000e+00j],\n",
            "        [ 7.6235e-03-6.0993e-02j, -9.9040e-01-1.2379e-01j,\n",
            "         -2.1568e-04+0.0000e+00j,  0.0000e+00+1.1471e-03j],\n",
            "        [-1.4449e-04+1.1560e-03j, -7.1191e-05-8.8983e-06j,\n",
            "         -9.8278e-01+0.0000e+00j,  0.0000e+00-1.8478e-01j],\n",
            "        [-7.1191e-05-8.8983e-06j, -1.4449e-04+1.1560e-03j,\n",
            "          0.0000e+00-1.8478e-01j, -9.8278e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9035e-01-1.2400e-01j,  7.6822e-03-6.1354e-02j,\n",
            "          0.0000e+00+4.9186e-04j, -9.2777e-05+0.0000e+00j],\n",
            "        [ 7.6822e-03-6.1354e-02j, -9.9035e-01-1.2400e-01j,\n",
            "         -9.2777e-05+0.0000e+00j,  0.0000e+00+4.9186e-04j],\n",
            "        [-6.2067e-05+4.9570e-04j, -3.0709e-05-3.8452e-06j,\n",
            "         -9.8267e-01+0.0000e+00j,  0.0000e+00-1.8536e-01j],\n",
            "        [-3.0709e-05-3.8452e-06j, -6.2067e-05+4.9570e-04j,\n",
            "          0.0000e+00-1.8536e-01j, -9.8267e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9025e-01-1.2451e-01j,  7.7995e-03-6.2029e-02j,\n",
            "          0.0000e+00-3.0925e-04j,  5.8718e-05+0.0000e+00j],\n",
            "        [ 7.7995e-03-6.2029e-02j, -9.9025e-01-1.2451e-01j,\n",
            "          5.8718e-05+0.0000e+00j,  0.0000e+00-3.0925e-04j],\n",
            "        [ 3.9193e-05-3.1170e-04j,  1.9525e-05+2.4551e-06j,\n",
            "         -9.8245e-01+0.0000e+00j,  0.0000e+00-1.8654e-01j],\n",
            "        [ 1.9525e-05+2.4551e-06j,  3.9193e-05-3.1170e-04j,\n",
            "          0.0000e+00-1.8654e-01j, -9.8245e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9016e-01-1.2493e-01j,  7.8983e-03-6.2600e-02j,\n",
            "          0.0000e+00-9.0394e-04j,  1.7258e-04+0.0000e+00j],\n",
            "        [ 7.8983e-03-6.2600e-02j, -9.9016e-01-1.2493e-01j,\n",
            "          1.7258e-04+0.0000e+00j,  0.0000e+00-9.0394e-04j],\n",
            "        [ 1.1497e-04-9.1121e-04j,  5.7608e-05+7.2686e-06j,\n",
            "         -9.8226e-01+0.0000e+00j,  0.0000e+00-1.8753e-01j],\n",
            "        [ 5.7608e-05+7.2686e-06j,  1.1497e-04-9.1121e-04j,\n",
            "          0.0000e+00-1.8753e-01j, -9.8226e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9014e-01-1.2496e-01j,  7.9183e-03-6.2745e-02j,\n",
            "          0.0000e+00-1.0586e-03j,  2.0229e-04+0.0000e+00j],\n",
            "        [ 7.9183e-03-6.2745e-02j, -9.9014e-01-1.2496e-01j,\n",
            "          2.0229e-04+0.0000e+00j,  0.0000e+00-1.0586e-03j],\n",
            "        [ 1.3467e-04-1.0671e-03j,  6.7623e-05+8.5339e-06j,\n",
            "         -9.8223e-01+0.0000e+00j,  0.0000e+00-1.8770e-01j],\n",
            "        [ 6.7623e-05+8.5339e-06j,  1.3467e-04-1.0671e-03j,\n",
            "          0.0000e+00-1.8770e-01j, -9.8223e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9021e-01-1.2458e-01j,  7.8546e-03-6.2434e-02j,\n",
            "          0.0000e+00-7.4518e-04j,  1.4186e-04+0.0000e+00j],\n",
            "        [ 7.8546e-03-6.2434e-02j, -9.9021e-01-1.2458e-01j,\n",
            "          1.4186e-04+0.0000e+00j,  0.0000e+00-7.4518e-04j],\n",
            "        [ 9.4498e-05-7.5113e-04j,  4.7360e-05+5.9582e-06j,\n",
            "         -9.8236e-01+0.0000e+00j,  0.0000e+00-1.8701e-01j],\n",
            "        [ 4.7360e-05+5.9582e-06j,  9.4498e-05-7.5113e-04j,\n",
            "          0.0000e+00-1.8701e-01j, -9.8236e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9031e-01-1.2406e-01j,  7.7570e-03-6.1923e-02j,\n",
            "          0.0000e+00-1.3947e-04j,  2.6399e-05+0.0000e+00j],\n",
            "        [ 7.7570e-03-6.1923e-02j, -9.9031e-01-1.2406e-01j,\n",
            "          2.6399e-05+0.0000e+00j,  0.0000e+00-1.3947e-04j],\n",
            "        [ 1.7610e-05-1.4057e-04j,  8.7898e-06+1.1011e-06j,\n",
            "         -9.8255e-01+0.0000e+00j,  0.0000e+00-1.8598e-01j],\n",
            "        [ 8.7898e-06+1.1011e-06j,  1.7610e-05-1.4057e-04j,\n",
            "          0.0000e+00-1.8598e-01j, -9.8255e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9037e-01-1.2374e-01j,  7.6920e-03-6.1562e-02j,\n",
            "          0.0000e+00+4.6998e-04j, -8.8626e-05+0.0000e+00j],\n",
            "        [ 7.6920e-03-6.1562e-02j, -9.9037e-01-1.2374e-01j,\n",
            "         -8.8626e-05+0.0000e+00j,  0.0000e+00+4.6998e-04j],\n",
            "        [-5.9183e-05+4.7366e-04j, -2.9443e-05-3.6788e-06j,\n",
            "         -9.8268e-01+0.0000e+00j,  0.0000e+00-1.8531e-01j],\n",
            "        [-2.9443e-05-3.6788e-06j, -5.9183e-05+4.7366e-04j,\n",
            "          0.0000e+00-1.8531e-01j, -9.8268e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9036e-01-1.2384e-01j,  7.6984e-03-6.1564e-02j,\n",
            "          0.0000e+00+8.1689e-04j, -1.5413e-04+0.0000e+00j],\n",
            "        [ 7.6984e-03-6.1564e-02j, -9.9036e-01-1.2384e-01j,\n",
            "         -1.5413e-04+0.0000e+00j,  0.0000e+00+8.1689e-04j],\n",
            "        [-1.0295e-04+8.2329e-04j, -5.1178e-05-6.3998e-06j,\n",
            "         -9.8266e-01+0.0000e+00j,  0.0000e+00-1.8541e-01j],\n",
            "        [-5.1178e-05-6.3998e-06j, -1.0295e-04+8.2329e-04j,\n",
            "          0.0000e+00-1.8541e-01j, -9.8266e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9029e-01-1.2427e-01j,  7.7648e-03-6.1874e-02j,\n",
            "          0.0000e+00+7.7168e-04j, -1.4620e-04+0.0000e+00j],\n",
            "        [ 7.7648e-03-6.1874e-02j, -9.9029e-01-1.2427e-01j,\n",
            "         -1.4620e-04+0.0000e+00j,  0.0000e+00+7.7168e-04j],\n",
            "        [-9.7606e-05+7.7778e-04j, -4.8597e-05-6.0985e-06j,\n",
            "         -9.8252e-01+0.0000e+00j,  0.0000e+00-1.8615e-01j],\n",
            "        [-4.8597e-05-6.0985e-06j, -9.7606e-05+7.7778e-04j,\n",
            "          0.0000e+00-1.8615e-01j, -9.8252e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9020e-01-1.2475e-01j,  7.8406e-03-6.2233e-02j,\n",
            "          0.0000e+00+3.8885e-04j, -7.4016e-05+0.0000e+00j],\n",
            "        [ 7.8406e-03-6.2233e-02j, -9.9020e-01-1.2475e-01j,\n",
            "         -7.4016e-05+0.0000e+00j,  0.0000e+00+3.8885e-04j],\n",
            "        [-4.9382e-05+3.9196e-04j, -2.4634e-05-3.1036e-06j,\n",
            "         -9.8236e-01+0.0000e+00j,  0.0000e+00-1.8699e-01j],\n",
            "        [-2.4634e-05-3.1036e-06j, -4.9382e-05+3.9196e-04j,\n",
            "          0.0000e+00-1.8699e-01j, -9.8236e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9016e-01-1.2499e-01j,  7.8730e-03-6.2370e-02j,\n",
            "          0.0000e+00-1.3083e-04j,  2.4954e-05+0.0000e+00j],\n",
            "        [ 7.8730e-03-6.2370e-02j, -9.9016e-01-1.2499e-01j,\n",
            "          2.4954e-05+0.0000e+00j,  0.0000e+00-1.3083e-04j],\n",
            "        [ 1.6647e-05-1.3188e-04j,  8.3069e-06+1.0486e-06j,\n",
            "         -9.8229e-01+0.0000e+00j,  0.0000e+00-1.8736e-01j],\n",
            "        [ 8.3069e-06+1.0486e-06j,  1.6647e-05-1.3188e-04j,\n",
            "          0.0000e+00-1.8736e-01j, -9.8229e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9019e-01-1.2487e-01j,  7.8426e-03-6.2192e-02j,\n",
            "          0.0000e+00-5.4302e-04j,  1.0340e-04+0.0000e+00j],\n",
            "        [ 7.8426e-03-6.2192e-02j, -9.9019e-01-1.2487e-01j,\n",
            "          1.0340e-04+0.0000e+00j,  0.0000e+00-5.4302e-04j],\n",
            "        [ 6.9023e-05-5.4735e-04j,  3.4378e-05+4.3352e-06j,\n",
            "         -9.8235e-01+0.0000e+00j,  0.0000e+00-1.8706e-01j],\n",
            "        [ 3.4378e-05+4.3352e-06j,  6.9023e-05-5.4735e-04j,\n",
            "          0.0000e+00-1.8706e-01j, -9.8235e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9026e-01-1.2452e-01j,  7.7751e-03-6.1833e-02j,\n",
            "          0.0000e+00-6.7125e-04j,  1.2732e-04+0.0000e+00j],\n",
            "        [ 7.7751e-03-6.1833e-02j, -9.9026e-01-1.2452e-01j,\n",
            "          1.2732e-04+0.0000e+00j,  0.0000e+00-6.7125e-04j],\n",
            "        [ 8.5073e-05-6.7656e-04j,  4.2245e-05+5.3121e-06j,\n",
            "         -9.8248e-01+0.0000e+00j,  0.0000e+00-1.8635e-01j],\n",
            "        [ 4.2245e-05+5.3121e-06j,  8.5073e-05-6.7656e-04j,\n",
            "          0.0000e+00-1.8635e-01j, -9.8248e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9032e-01-1.2421e-01j,  7.7197e-03-6.1551e-02j,\n",
            "          0.0000e+00-4.8207e-04j,  9.1133e-05+0.0000e+00j],\n",
            "        [ 7.7197e-03-6.1551e-02j, -9.9032e-01-1.2421e-01j,\n",
            "          9.1133e-05+0.0000e+00j,  0.0000e+00-4.8207e-04j],\n",
            "        [ 6.0936e-05-4.8585e-04j,  3.0197e-05+3.7873e-06j,\n",
            "         -9.8260e-01+0.0000e+00j,  0.0000e+00-1.8576e-01j],\n",
            "        [ 3.0197e-05+3.7873e-06j,  6.0936e-05-4.8585e-04j,\n",
            "          0.0000e+00-1.8576e-01j, -9.8260e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9032e-01-1.2413e-01j,  7.7135e-03-6.1539e-02j,\n",
            "          0.0000e+00-9.0195e-05j,  1.7043e-05+0.0000e+00j],\n",
            "        [ 7.7135e-03-6.1539e-02j, -9.9032e-01-1.2413e-01j,\n",
            "          1.7043e-05+0.0000e+00j,  0.0000e+00-9.0195e-05j],\n",
            "        [ 1.1394e-05-9.0903e-05j,  5.6487e-06+7.0803e-07j,\n",
            "         -9.8261e-01+0.0000e+00j,  0.0000e+00-1.8567e-01j],\n",
            "        [ 5.6487e-06+7.0803e-07j,  1.1394e-05-9.0903e-05j,\n",
            "          0.0000e+00-1.8567e-01j, -9.8261e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9029e-01-1.2431e-01j,  7.7571e-03-6.1796e-02j,\n",
            "          0.0000e+00+3.0617e-04j, -5.7993e-05+0.0000e+00j],\n",
            "        [ 7.7571e-03-6.1796e-02j, -9.9029e-01-1.2431e-01j,\n",
            "         -5.7993e-05+0.0000e+00j,  0.0000e+00+3.0617e-04j],\n",
            "        [-3.8736e-05+3.0859e-04j, -1.9256e-05-2.4172e-06j,\n",
            "         -9.8253e-01+0.0000e+00j,  0.0000e+00-1.8610e-01j],\n",
            "        [-1.9256e-05-2.4172e-06j, -3.8736e-05+3.0859e-04j,\n",
            "          0.0000e+00-1.8610e-01j, -9.8253e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9023e-01-1.2457e-01j,  7.8168e-03-6.2138e-02j,\n",
            "          0.0000e+00+5.2297e-04j, -9.9390e-05+0.0000e+00j],\n",
            "        [ 7.8168e-03-6.2138e-02j, -9.9023e-01-1.2457e-01j,\n",
            "         -9.9390e-05+0.0000e+00j,  0.0000e+00+5.2297e-04j],\n",
            "        [-6.6312e-05+5.2713e-04j, -3.3078e-05-4.1611e-06j,\n",
            "         -9.8241e-01+0.0000e+00j,  0.0000e+00-1.8671e-01j],\n",
            "        [-3.3078e-05-4.1611e-06j, -6.6312e-05+5.2713e-04j,\n",
            "          0.0000e+00-1.8671e-01j, -9.8241e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9020e-01-1.2470e-01j,  7.8506e-03-6.2338e-02j,\n",
            "          0.0000e+00+4.7577e-04j, -9.0587e-05+0.0000e+00j],\n",
            "        [ 7.8506e-03-6.2338e-02j, -9.9020e-01-1.2470e-01j,\n",
            "         -9.0587e-05+0.0000e+00j,  0.0000e+00+4.7577e-04j],\n",
            "        [-6.0395e-05+4.7957e-04j, -3.0192e-05-3.8022e-06j,\n",
            "         -9.8235e-01+0.0000e+00j,  0.0000e+00-1.8704e-01j],\n",
            "        [-3.0192e-05-3.8022e-06j, -6.0395e-05+4.7957e-04j,\n",
            "          0.0000e+00-1.8704e-01j, -9.8235e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9022e-01-1.2460e-01j,  7.8376e-03-6.2286e-02j,\n",
            "          0.0000e+00+2.1068e-04j, -4.0080e-05+0.0000e+00j],\n",
            "        [ 7.8376e-03-6.2286e-02j, -9.9022e-01-1.2460e-01j,\n",
            "         -4.0080e-05+0.0000e+00j,  0.0000e+00+2.1068e-04j],\n",
            "        [-2.6722e-05+2.1236e-04j, -1.3358e-05-1.6808e-06j,\n",
            "         -9.8238e-01+0.0000e+00j,  0.0000e+00-1.8689e-01j],\n",
            "        [-1.3358e-05-1.6808e-06j, -2.6722e-05+2.1236e-04j,\n",
            "          0.0000e+00-1.8689e-01j, -9.8238e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9027e-01-1.2435e-01j,  7.7919e-03-6.2050e-02j,\n",
            "          0.0000e+00-1.2851e-04j,  2.4382e-05+0.0000e+00j],\n",
            "        [ 7.7919e-03-6.2050e-02j, -9.9027e-01-1.2435e-01j,\n",
            "          2.4382e-05+0.0000e+00j,  0.0000e+00-1.2851e-04j],\n",
            "        [ 1.6265e-05-1.2953e-04j,  8.1163e-06+1.0192e-06j,\n",
            "         -9.8247e-01+0.0000e+00j,  0.0000e+00-1.8640e-01j],\n",
            "        [ 8.1163e-06+1.0192e-06j,  1.6265e-05-1.2953e-04j,\n",
            "          0.0000e+00-1.8640e-01j, -9.8247e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9031e-01-1.2414e-01j,  7.7490e-03-6.1819e-02j,\n",
            "          0.0000e+00-3.7505e-04j,  7.0980e-05+0.0000e+00j],\n",
            "        [ 7.7490e-03-6.1819e-02j, -9.9031e-01-1.2414e-01j,\n",
            "          7.0980e-05+0.0000e+00j,  0.0000e+00-3.7505e-04j],\n",
            "        [ 4.7384e-05-3.7801e-04j,  2.3597e-05+2.9579e-06j,\n",
            "         -9.8256e-01+0.0000e+00j,  0.0000e+00-1.8595e-01j],\n",
            "        [ 2.3597e-05+2.9579e-06j,  4.7384e-05-3.7801e-04j,\n",
            "          0.0000e+00-1.8595e-01j, -9.8256e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9031e-01-1.2411e-01j,  7.7392e-03-6.1752e-02j,\n",
            "          0.0000e+00-4.1913e-04j,  7.9282e-05+0.0000e+00j],\n",
            "        [ 7.7392e-03-6.1752e-02j, -9.9031e-01-1.2411e-01j,\n",
            "          7.9282e-05+0.0000e+00j,  0.0000e+00-4.1913e-04j],\n",
            "        [ 5.2941e-05-4.2243e-04j,  2.6341e-05+3.3012e-06j,\n",
            "         -9.8257e-01+0.0000e+00j,  0.0000e+00-1.8586e-01j],\n",
            "        [ 2.6341e-05+3.3012e-06j,  5.2941e-05-4.2243e-04j,\n",
            "          0.0000e+00-1.8586e-01j, -9.8257e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9028e-01-1.2429e-01j,  7.7659e-03-6.1874e-02j,\n",
            "          0.0000e+00-2.5794e-04j,  4.8874e-05+0.0000e+00j],\n",
            "        [ 7.7659e-03-6.1874e-02j, -9.9028e-01-1.2429e-01j,\n",
            "          4.8874e-05+0.0000e+00j,  0.0000e+00-2.5794e-04j],\n",
            "        [ 3.2630e-05-2.5998e-04j,  1.6244e-05+2.0388e-06j,\n",
            "         -9.8252e-01+0.0000e+00j,  0.0000e+00-1.8617e-01j],\n",
            "        [ 1.6244e-05+2.0388e-06j,  3.2630e-05-2.5998e-04j,\n",
            "          0.0000e+00-1.8617e-01j, -9.8252e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9024e-01-1.2454e-01j,  7.8060e-03-6.2064e-02j,\n",
            "          0.0000e+00+1.1741e-05j, -2.2301e-06+0.0000e+00j],\n",
            "        [ 7.8060e-03-6.2064e-02j, -9.9024e-01-1.2454e-01j,\n",
            "         -2.2301e-06+0.0000e+00j,  0.0000e+00+1.1741e-05j],\n",
            "        [-1.4884e-06+1.1834e-05j, -7.4171e-07-9.3287e-08j,\n",
            "         -9.8243e-01+0.0000e+00j,  0.0000e+00-1.8661e-01j],\n",
            "        [-7.4171e-07-9.3287e-08j, -1.4884e-06+1.1834e-05j,\n",
            "          0.0000e+00-1.8661e-01j, -9.8243e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9021e-01-1.2470e-01j,  7.8283e-03-6.2165e-02j,\n",
            "          0.0000e+00+2.5070e-04j, -4.7686e-05+0.0000e+00j],\n",
            "        [ 7.8283e-03-6.2165e-02j, -9.9021e-01-1.2470e-01j,\n",
            "         -4.7686e-05+0.0000e+00j,  0.0000e+00+2.5070e-04j],\n",
            "        [-3.1822e-05+2.5270e-04j, -1.5864e-05-1.9978e-06j,\n",
            "         -9.8239e-01+0.0000e+00j,  0.0000e+00-1.8686e-01j],\n",
            "        [-1.5864e-05-1.9978e-06j, -3.1822e-05+2.5270e-04j,\n",
            "          0.0000e+00-1.8686e-01j, -9.8239e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9022e-01-1.2466e-01j,  7.8175e-03-6.2097e-02j,\n",
            "          0.0000e+00+3.4475e-04j, -6.5537e-05+0.0000e+00j],\n",
            "        [ 7.8175e-03-6.2097e-02j, -9.9022e-01-1.2466e-01j,\n",
            "         -6.5537e-05+0.0000e+00j,  0.0000e+00+3.4475e-04j],\n",
            "        [-4.3746e-05+3.4749e-04j, -2.1791e-05-2.7433e-06j,\n",
            "         -9.8241e-01+0.0000e+00j,  0.0000e+00-1.8676e-01j],\n",
            "        [-2.1791e-05-2.7433e-06j, -4.3746e-05+3.4749e-04j,\n",
            "          0.0000e+00-1.8676e-01j, -9.8241e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9026e-01-1.2449e-01j,  7.7840e-03-6.1919e-02j,\n",
            "          0.0000e+00+2.6042e-04j, -4.9409e-05+0.0000e+00j],\n",
            "        [ 7.7840e-03-6.1919e-02j, -9.9026e-01-1.2449e-01j,\n",
            "         -4.9409e-05+0.0000e+00j,  0.0000e+00+2.6042e-04j],\n",
            "        [-3.2997e-05+2.6248e-04j, -1.6412e-05-2.0632e-06j,\n",
            "         -9.8247e-01+0.0000e+00j,  0.0000e+00-1.8641e-01j],\n",
            "        [-1.6412e-05-2.0632e-06j, -3.2997e-05+2.6248e-04j,\n",
            "          0.0000e+00-1.8641e-01j, -9.8247e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9029e-01-1.2432e-01j,  7.7547e-03-6.1769e-02j,\n",
            "          0.0000e+00+5.6250e-05j, -1.0654e-05+0.0000e+00j],\n",
            "        [ 7.7547e-03-6.1769e-02j, -9.9029e-01-1.2432e-01j,\n",
            "         -1.0654e-05+0.0000e+00j,  0.0000e+00+5.6250e-05j],\n",
            "        [-7.1176e-06+5.6694e-05j, -3.5363e-06-4.4396e-07j,\n",
            "         -9.8253e-01+0.0000e+00j,  0.0000e+00-1.8609e-01j],\n",
            "        [-3.5363e-06-4.4396e-07j, -7.1176e-06+5.6694e-05j,\n",
            "          0.0000e+00-1.8609e-01j, -9.8253e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9029e-01-1.2428e-01j,  7.7510e-03-6.1760e-02j,\n",
            "          0.0000e+00-1.5648e-04j,  2.9630e-05+0.0000e+00j],\n",
            "        [ 7.7510e-03-6.1760e-02j, -9.9029e-01-1.2428e-01j,\n",
            "          2.9630e-05+0.0000e+00j,  0.0000e+00-1.5648e-04j],\n",
            "        [ 1.9794e-05-1.5772e-04j,  9.8362e-06+1.2345e-06j,\n",
            "         -9.8254e-01+0.0000e+00j,  0.0000e+00-1.8604e-01j],\n",
            "        [ 9.8362e-06+1.2345e-06j,  1.9794e-05-1.5772e-04j,\n",
            "          0.0000e+00-1.8604e-01j, -9.8254e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n",
            "tensor(0.0078, grad_fn=<RsubBackward1>)\n",
            "tensor([[-9.9027e-01-1.2438e-01j,  7.7739e-03-6.1895e-02j,\n",
            "          0.0000e+00-2.7132e-04j,  5.1439e-05+0.0000e+00j],\n",
            "        [ 7.7739e-03-6.1895e-02j, -9.9027e-01-1.2438e-01j,\n",
            "          5.1439e-05+0.0000e+00j,  0.0000e+00-2.7132e-04j],\n",
            "        [ 3.4346e-05-2.7346e-04j,  1.7092e-05+2.1468e-06j,\n",
            "         -9.8250e-01+0.0000e+00j,  0.0000e+00-1.8627e-01j],\n",
            "        [ 1.7092e-05+2.1468e-06j,  3.4346e-05-2.7346e-04j,\n",
            "          0.0000e+00-1.8627e-01j, -9.8250e-01+0.0000e+00j]],\n",
            "       grad_fn=<MmBackward0>)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fdcc38f2310>]"
            ]
          },
          "metadata": {},
          "execution_count": 62
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# **3.2 Variational Pulse Learning**"
      ],
      "metadata": {
        "id": "HB4WtwxOe6mQ"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Varitional pulse control schme is designed to avoid drawbacks of gate level approaches as well as quantum optimal control. We try to find a intermdiate level of pulse control abstraction and post optimization algorithms to improve the pulses and finally achieves better performance on quantum algorithm on NISQ machines."
      ],
      "metadata": {
        "id": "DCqFYkPKKNMV"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## **Native Pulse Build-up**"
      ],
      "metadata": {
        "id": "opXOGoIvhGNU"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Set the backend, please note that pulse is hardware dependent, it varying with every calibration and also different with devices."
      ],
      "metadata": {
        "id": "dGqKFAf0hZQC"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "backend = FakeJakarta()"
      ],
      "metadata": {
        "id": "xmlJ7kRkM0lv"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "SNP is namly a single-qubit native pulse, and TNP is two-qubit native pulse, we use this as a example to build the pulse ansatz for VQE task."
      ],
      "metadata": {
        "id": "wZz_PMfdhoP9"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "sched0 = snp(0, backend)\n",
        "sched0.draw()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 177
        },
        "id": "HTnB6_GXuhDU",
        "outputId": "bdb5ac2c-e0b0-45cd-d9a8-7ac4d4273908"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Figure size 936x118.8 with 1 Axes>"
            ],
            "image/png": "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6qmnOPa445qlf/fdd7noogu5a8IEBg4cCMCzzz7Dbt/6Vkq6ww4/nEMOPZTKPn06rKwPP/ww/fr1Y9fddgOguLiYbbfZhkmTJnXYMURERERk9eh+sv26ZQBSUlLCmDFHMHHixKZ1Dz30IJtuuilbbbVVStrFixdz4okncMEFF7L77t9uWv/BBx8wYsSINSrHuHGXMnTIRuy3775MnvxyxjQT77uXY449FjNrWrfpZpvxn/ffX6Nji4iIiEj76X6y/bplAAKh2uzhh/9BTU0NABPvm8ixxx2fksbd+dH//A+jNh/FOeeem7JtyZIlVJSXt/v4l13+a957/z9M/fgTxp58Mt8/+mimT5+ekuaLL77glVde4bi0clWUl7NkyZJ2H1tERERE1pzuJ9un2wYgu+y6K32qqnjssUeZPn06b7/9Fkcf/b2UNL+56SY+/OhDbrv99pSIEaB3794sq65u9/FHjx5NRUUFRUVFHH/88ey0884888zTKWnuv38iu+yyC0OHDk1Zv6y6ml69erX72CIiIiKy5nQ/2T7dNgABOPbYY5k4cSIPPHA/++yzL/37D2jaNnnyy9xww/X86U9/pnfv3s323XLLLZk2bVqHlcXMmnVimnjfxGbRKsDHU6eyZVrVnoiIiIjknu4nV183D0CO48UXXuDuCRM47vhkZ6HZs2dz8tixXHPNtWy99dYZ991//wN49ZXJKevq6+upqamhsaGRhsYGampqqK+vb7bv4sWLmTRpUtP2Bx54gNdefZV9992vKc3r//oXs2bN5LtjxqTsW1NTw5R//5u99957TU5dRERERDqA7idXX7cOQIYMGcJOO+3EihUrOPjg7zStnzDhLubOncuFF17QbAzlc84+CwjR7jPPPMPKlSub9rvuumvp368vN910Iw/cfz/9+/XluuuuBeCII8Zww/XXA1BfV8evf305w4cNZdjQIdx+223cN/H+lE5I9913L4cedhgVFRUpZX7yySfY/VvfYtCgQWvrbRERERGRLOl+cvVZejVNZzGzccCl0aIDS4BpwDPA79x9diytARcDPwH6Am8CZ7n7vxNptttuO3/p5dSIsqNdNm4cffv14/TTT28xzS233MJd4/+YYf2t7LLrrqt9zL322pNbb72VUaO2WO19RURERKRraet+sqPvJWH17id7VpS/7e47tOtALSjoyMw6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\n"
          },
          "metadata": {},
          "execution_count": 64
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sched1 = snp(1, backend)\n",
        "sched1.draw()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 177
        },
        "id": "wyhu4poTM38D",
        "outputId": "dcc716a0-8051-48ab-e7a5-ab5a3744d725"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Figure size 936x118.8 with 1 Axes>"
            ],
            "image/png": "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bBjjxo1b3LfBzMzMzBrJ7cnGa5UByH777c/kyZN55eWXq9KmTJnC448/zhFHHlkj/zvvvMO5557DbYMH06NHDwCeeupJttt++2r5DjjwQPbbf3+6rLxy2er64IMPssoqq7DtdtsBsPzyy7PJxhvz9NNPl20fZmZmZtYwbk82XqsMQNq3b0///gczZMiQqrT777+Ptddemw033LBa3qlTp3LMMUdz9tnnsMMOO1alv//++6y11lqLVY+BAy+kd6812GP33Rk27MWieYbcdSeHH3EEkqrS1l5nHf773nuLtW8zMzMzazy3JxuvVQYgkLrNHnzwAebMmQPAkLuGcMSRR1XLExH87Kc/pd96/Tj9jDOqrZs2bRodO3Ro9P4vuvgS3n3vv4z438cMOO44fnTYYYwaNapans8//5yXXnqJIwvq1bFDB6ZNm9bofZuZmZnZ4nN7snFabQCyzbbbsnLXrjzyyMOMGjWKN998g8MO+2G1PL+/7jo+/OhDbrr55moRI0Dnzp2ZMXNmo/e/xRZb0LFjR9q1a8dRRx3FVltvzZNPPlEtz913D2Gbbbahd+/e1dJnzJzJSiut1Oh9m5mZmdnic3uycVptAAJwxBFHMGTIEO6552522213undftWrdsGEvcs01V/O3v/2dzp0719h2gw02YOTIkWWri6Qak5iG3DWkRrQK8L8RI9igoGvPzMzMzCrP7cmGa+UByJE8/9xz3D54MEcetWiy0NixYzluwACuvPIqNtpoo6Lb7rnnXrz80rBqafPnz2fOnDksXLCQBQsXMGfOHObPn19j26lTp/L0009Xrb/nnnt45eWX2X33ParyvPqf//D112M4qH//atvOmTOH4W+/za677ro4h25mZmZmZeD2ZMO16gCkV69ebLXVVsyaNYt99/1BVfrgwbcxfvx4zjnn7Br3UD79tFOBFO0++eSTzJ49u2q7QYOuovsq3bjuumu55+676b5KNwYNugqAgw/uzzVXXw3A/HnzuOSSi+nbpzd9evfi5ptu4q4hd1ebhHTXXXey/wEH0LFjx2p1Hjr0MXbYfnt69uy5pN4WMzMzMyuR25MNp8JumqYiaSBwYbYYwDRgJPAk8KeIGJuX95fAD4CtgZWBXSLi+fzyNt1003jhxeoRZbldNHAg3VZZhZNOOqnWPNdffz233frXIuk3sM222zZ4n7vs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\n"
          },
          "metadata": {},
          "execution_count": 65
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sched2 = tnp(0,1,backend)\n",
        "sched2.draw()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 503
        },
        "id": "puS0a_FWM-Nc",
        "outputId": "95ca2a74-00cd-44d9-d5c2-3364ef381865"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Figure size 936x550.8 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {},
          "execution_count": 66
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "pul_append is a method to combine two schedules."
      ],
      "metadata": {
        "id": "m_ZqZASuh813"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "pulse_ansatz = pul_append(sched0, sched1)\n",
        "pulse_ansatz.draw()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 266
        },
        "id": "3RX66l2GNCsw",
        "outputId": "7f33c770-fca7-44c8-b64e-c250348875ce"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Figure size 936x237.6 with 1 Axes>"
            ],
            "image/png": "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6Uw4cwIAp532Q95ZtIhNmzY192kQERERkSZSfbLp4jIAOf30cWzfvp3F773n31dYWMjLL7/MxEmTaqX/9NNPufHGG3hk9my6d+8OwGuvvcqRRx0VlG78GWdw+rhx5Hbp0mJlfe655+jatStHHHkkAGlpaYwYPpyFCxe22DVEREREpHFUn2y6uAxA0tPTmTDhLObOnevf989/PsOgQYMYNmxYUNodO3Zw/vlTuP76Gzj66B/49y9fvpyBAwc2qxzTpt1C3z69OfGEE1i06J2waebOeZLzJk7EzPz7Bg0ezOfLljXr2iIiIiLSdKpPNl1cBiDgNZs999yzlJSUADB3zlwmTpoclMY5xy9+/nOG7j+Uq6+5JujYzp07yczIaPL1b73t93y27HNW/ncVUy+8kB+fey5r1qwJSvPtt9/y7rvvMimkXJkZGezcubPJ1xYRERGR5lN9smniNgA5/Igj6JKXxwsvPM+aNWtYsuRjzj33nKA0f7j/fr5c8SWzHnooKGIEyMnJoai4uMnXHz16NJmZmaSmpjJ58mTGHHYYr776SlCaefPmcvjhh9O3b9+g/UXFxWRnZzf52iIiIiLSfKpPNk3cBiAAEydOZO7cucyfP4/jjz+BgoJu/mOLFr3DjBn38vjjT5CTk1Pr3AMPPJDVq1e3WFnMrNYgprlz5taKVgH+u3IlB4Y07YmIiIhI9Kk+2XhxHoBM4q033+TR2bOZNLlmsNDGjRu5cOpUpk+/m4MPPjjsuSeddDLvvbsoaF9FRQUlJSVUVVZRWVVJSUkJFRUVtc7dsWMHCxcu9B+fP38+i997jxNOONGf5oP332fDhvWcOWFC0LklJSUs/c9/OO6445rz0EVERESkBag+2XhxHYD06dOHMWPGsGfPHk477Yf+/bNnP8LmzZu54Ybra82hfPUvrwK8aPfVV19l7969/vPuueduCrrmc//99zF/3jwKuuZzzz13A3DWWROYce+9AFSUl/P7399G/3596de3Dw/NmsWcufOCBiHNmfMk48aPJzMzM6jMCxa8xNFHHUWPHj1a62kRERERkQipPtl4FtpM01GMHDnSvf3OooYTNsOt06aR37Url19+eateJ9DYsccyc+ZMhg49IGrXFBEREZHWEev1yazMjCXOuVEteX0FICIiIiIiElZrBCBx3QVLRERERESiK2YCEDObZmbO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\n"
          },
          "metadata": {},
          "execution_count": 67
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "pulse_ansatz = pul_append(pulse_ansatz, sched2)\n",
        "pulse_ansatz.draw()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 503
        },
        "id": "dvQiHIEIRE4s",
        "outputId": "cb51438a-ac1a-4bd8-e38f-bce1d4ca6c7a"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Figure size 936x550.8 with 1 Axes>"
            ],
            "image/png": "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8RX5KPIVkZubS2FhYbnXpqen8/HHH5esnzt3Ll8sXMgJJ4wpKfP1V1+xdesWzhw/vtRrc3NzWfrttxx//PF1eev1Lpht26pVK047/XTuu+9esrKy+OrLL3n3nXc4/4Lzy722qrJVrY+U9hURERFpTJp0KOnWrRtDhgwhOzubk08+pWT5zJnPsWPHDm677dZy99O44XfXA15PwIcffkhOTk7J6x566EGSOyTx6KN/Zu6cOSR3SOKhhx4E4KyzxvPIww8DUFhQwD33/ImePbrTo3s3nn7qKV6aPafU5OuXXprFaaefXm7+w3vvvcvIESPo1KlTfTVLUAS7bR999C/k5uRyUM8eXHbZpTz6l7/Sp89hQOm2rapsVesjpX1FREREGhMrO2SosRg0aJD7fN78qgvWwd3TppHUoQPXXnttve4n0HHHHcuMGTM47LC+DbbPUAhF20LTaV8RERGR6midEL/YOXdUfe9HoURERERERCrUUKGkSQ/fEhERERGR0FMoERERERGRkFIoERERERGRkFIoERERERGRkAqbUGJm08zM+R8+M0szs0Vmdp+ZdSxT1szsTjPbaGY5ZjbPzAaEqu7788QTT3DkoIHlHl9+8UWoqxbx1LYiIiIijUNMqCtQxh5grP/nNsAg4GrgN2Y21jm32L/udmAKcAvwI3AT8LGZ9XPObWvgOu/Xa6++yurVq8stz8zKCkFtGhe1rYiIiEjjEDY9JX6Fzrmv/I8PnHMPAEcAW4E5ZhZtZi3wQskDzrknnHMfA+cCDrguVBVfsGA+P//8837L/OGuu9ibkcnejEzGjBmz37Kyj9pWREREpHELt1BSjnMuHbgV6AWMAYYDrYGXA8pkAW8B40JRx7S0NC668EIuvujCCtenpKRw9NFDuP+++5g37/MGrl1kU9uKiIiINH5hH0r8PgMKgaHAoUARUHbczg/+dQ3uH//4P3bv3s3tt99R4frY2FheePFF4uLieHD69AauXWRT24qIiIg0fhERSpxzucAuIAVoB2Q654rKFEsDWppZ84au30cffkRycjKnnnZapWU6derE2LFj+eKLL8jJyWnA2kU2ta2IiIhI4xduE933x0Jdgcps2bKZ7t17YFa+ijfffDM5ud6Jco8ePSkqKmLHjh1069atoatZb1aujy75uW+3slmxboLVtu/N3xTUegGMG3lg0Lcp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IxhDvkRE6lNMqCsg0tgUh46V66PLLRMRqQ+BgeO9+ZsqXC4iEs4USkTqiYKIiISCgoiIRCIN3xIRERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZBSKBERERERkZCKCXUFRERERJq6/ELIzTcKCqGwCFyoKxQiUQYx0dC8mSOuOUTr6/MmQ6FEREREpIE5B7kFkJ5pZOQYBYUW6iqFH4O45o7WLb1Hc521Nmr69YqIiIg0EJ+DjGxjd4aRk6cgsl8OcvK8dtqRDgktHUmtfcQ1D3XFpD4olIiIiIg0gIwc2J4eRV6+wkhNOQd7s4y9WdG0aeVIbutTz0kjo1+niIiISD0qLIKtqVHszbGmO1kkiPZkGRk50XRo4yMx3hGleSeNgkKJiIiISD3JyIYtqdEUFoW6Jo2Lzwfb06LIyHEckOgjtlmoayR1pWwpIiIiEmRFPtiWZmzYqUBSn7JzjbXboknP0pC4SKeeEhEREZEgKiiEzbujyMrViXJD8Pm89s7L95Hc1mFq9oikUCIiIiISJLn5sHFXFPkFOjNuUA527Y0iv9DRub1P80wikEKJiIiISBBk58H6HdH4fKGuSdO1N9soLIqiSwcfMdGhro3UhHKkiIiISB1l5MC67Qok4SA7z1i3I4r8wlDXRGpCoURERESkDtKzjI07o3G63G/YyMs31u+IIq8g1DWR6lIoEREREaml9CxjS2qUAkkYyi9QMIkkCiUiIiIitZCeZWxNjcJpyFbYKij0gomGcoU/hRIRERGRGsrI9u7Srjkk4a84mOh+MeFNoURERESkBrJyYeMuTWqPJPkF3uR3BZPwpVAiIiIiUk05+bBek9ojUl6+sXGXgkm4UigRERERqYa8Ati4U3NIIll2rmnYXZhSKBERERGpQkGhF0gKCnWn9ki3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rIwGHYmIiARNSUme6s3EJIhmYtmitxMGJSSdN6BSc5jktNRcJAMq1UdIRESUlIh0mRKH7DGkfyoxkZwzoNJjiOYiERGRFCUleaw3ajMKtYYkU28kJkp2Ns/gakf/CiUmuaR/pcfgaiUkIiKygZKSPNeTSYQSktZ6MolQQrL5QubXmPQr101uLqiucAytdoTU7E5ERNIoKSkAPZFMKCFpW3eTiZ1GJJWQ9IBwCLao8ahSYpLVqsodw/p7hPTNIyIiGfTVUCC60zldCUn7NjepUDLSs0Ih2GqAR1WZEpNsVFXm2GqAEhIREWmbvh4KTFcSjEIeZaurulrjoYSkd5jB8EGemnJlmX7l/mztGsJZREQ2pSjoAKTvNScaT874vN310nXNycb7i8PtrpfetdVAj6Kw8VVtCJSfBCc17O9QjbIlIiIdUFJSwJR89B4lH8Eb2t9RHPZYtiaE0z1xnzODIdUeA6p08kVEpGNKSkQkbw2ockSKknyxKkxSeWKfCYdhy5oklWVBRyIiIrlCfUpEJK9VlsE2Q5KUFOsX+75QUuzYZogSEhER6RolJSKS90qKYdQwj/4V6mzdW8ygf4XHqGEeJcVBRyMiIrlGzbdEpCCEDLYY4KgsS/Ll6hCxuLKTnhIpdgzt71EZDToSERHJVUpKRKSgVEahrMTjq1rjq3UhPC/oiHJXKAQDqjwGVDrCqncXEZFuUFIiIgUnHILB/Rw1FUm+qjVW1So56YpQCGoq/WSkqO3Rr0VERLpESYmIFKyiMAypdgysSlLbYKytM+qaDKcEZSMWgvISR79yR2VUNSMiItKzlJSISMELh6C63FFd7vAcNMagKW7EE5D0CnP+RcM/L8VFUFrsKIn4/XJERER6g5ISEZE0IYOyEigrKcRUREREJBiqgBcRERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUApKRERERERkUAVBR2AiEjW8hLg4oALOpIAGFgxhPQ1ISIivU/fNiIiAM6DxGpCsRVYfDUk14MXDzqq4IWKIVyBK+6PFxkERf3BVMkuIiI9S0mJiBS2ZCOhxsVY4xfgNQYdTfbx4uCtxuKrCdcvhFAprnRLvNIREC4NOjoREckTSkpEpDAlGwk1fIw1fubXkkjneI1Y/ceEGxbhSofjRbdVciIiIt2mpERECovzsIZPCDV8rOZZ3eE8rGEx4aYleNFtcdGRatYlIiKbTUmJiBSOxHrCtXMgsTboSPKHFydUNxealpKsHAdFFUFHJCIiOUg/a4lI/nMOa/yM8JoZSkh6S2It4TUzUs3hCnG0MhER6Q7VlIhIfvMShOo+9G+WpXc5R6j2XVx8DV75jhpOWEREOk3fGCKSv5KNhGvfgvjqoCMpKNb4GeHkepKVu6sTvIiIdIqab4lIfkqsJ7z2FSUkQYmv9s9/Yn3QkYiISA5QUiIi+Se+xr8hTjYEHUlhSzakEsM1QUciIiJZTkmJiOSX+CrCa1/VcL/Zwov770d8VdCRiIhIFlNSIiJ5w2IrCa99TZMhZhvnEV77GhZbGXQkIiKSpZSUiEhesNhyQutmazjabOUcoXWzsdjyoCMREZEspKRERHKexVYQqp0DLhl0KNIelyRUOweLrQg6EhERyTJKSkQkt8VXE6p9R31IcoUX998vjYomIiJplJSISO5KrCO87k3wmoKORLrCa/Lft8S6oCMREZEsoaRERHJTso7wutlKSHKV1+S/f8n6oCMREZEsoKRERHKPl0jd0GoekpyWbCC8bhZ4iaAjERGRgCkpEZHc4pKE172hmcLzRWK9/35qkAIRkYKmpEREcodLEqp9V52k8018tf++KjERESlYSkpEJGdYw0KsaUnQYUgvsKYlWMPCoMMQEZGAKCkRkZxgDYsI1c0POgzpRaG6+VjDoqDDEBGRACgpEZGsZ03LlJAUiFDdfKxpWdBhiIhIH1NSIiLZLbGW0Pp3wGmEpoLgEv77nVgbdCQiItKHlJSISPZKNqYmR9Rs7QXFi/vve7Ix6EhERKSPKCkRkezkPMK1b2oukkKVbPDff+cFHYmIiPQBJSUikn1cklDtHIivCToSCVJ8jX8daKhgEZG8p6RERLKONSzCmpYGHYZkAWtaqhG5REQKgJISEckq1vApobqPgg5Dskio7iOs4dOgwxARkV6kpEREsobFVhCqnxd0GJKFQvXzsNiKoMMQEZFeoqRERLJDYh2h2nc00pa0zYv710diXdCRiIhIL1BSIiLB85oIr3sLvKagI5FsputERCRvKSkRkcCF182GZF3QYUguSNb514uIiOQVJSUiEhznEVr3pob+la6Jr/GvG81hIiKSN5SUiEgwnEeofj7W9GXQkUgOsqYvCdXPV2IiIpInlJR0wyUXX8yNN97Yp8ecMmU/Pvzwgz49ZhB0bvOfNS7G6j8OOgzJYVb/Mda4OOgwRESkBxRkUnLMMUfzi1/8fKPljz/2GNttO4o//elPDBs6ZKNHVWUFV1zxKwBWrljB/fffxxlnnNGy/S233Mx++05m4IAavvff/91uDIcdegiDBg5o2fceu+/esi7zuNX9qjj33P8F4JxzzuGXv/hFT5yGXqFzK51hjZ8TqtPQv9J9obp5WOPnQYchIiLdVJBJybRp03jowQdxzrVa/sAD93PCCSdyyimnsPTLZa0eV1xxJYMHD2b69O8A8Kc//YmDD/4m0Wi0ZfthQ4fx4x+fx2mnndapOK6++jct+3/zrbdalqcfd/6Cj4lGoxxz9DEAHHbY4fx7xgyWLVvW3dPQK3RupSMWW06o7kM1u5Ge4TxCdR9iseVBRyIiIt1QkEnJEUdMZdWqVbz80ksty1avXs1TTz3FydOmbVR+zpw5XHDB+dxx550MHToUgKef/hdf32efVuWOPOoojpg6lf41NT0W68MPP8ygQYP42te/DkBpaSm777YbzzzzTI8doyfp3Eq74qsJrXtbc5FIz/Li/nWlARNERHJWQSYl0WiUY475Fvfff3/Lsr///W+MGTOGXXbZpVXZNWvWcNppp3LeeeczefK+Lcvff/99Ro8e3a04LrnkYkaO2JpvHHQQM2b8u80y99/3J046+WTMrGXZmO2357133+3WsXuLzq1sUqKW8LpZ4BJBRyL5yCUIr3sDErVBRyIiIpuhIJMS8JsZPfzwP2hsbATg/vvu5+Rpp7Qq45zjv//rvxi741h++D//02rd2rVrqayo2OzjX3rZz3nn3feY99F8pn/nO5x4wgksXLiwVZlPP/2UmTNnMi0jrsqKCtauXbvZx+5tOreykWSdn5CohkR6kxf3rzPNeSMiknMKNimZ9LWvUTNgAI899igLFy5k9uxZnHDC8a3K/Paaa/hw7ofcfMstrX5NB6iurqZ2/frNPv5ee+1FZWUlJSUlnHLKKUyYOJF//eufrco88MD9TJo0iZEjR7ZaXrt+Pf369dvsY/c2nVtpJVlPeO0bkGwIOhIpBMmG1PVWH3QkIiLSBQWblACcfPLJ3H///Tz44AMceOBBDB48pGXdjBn/5uqrf80999xLdXX1RtvuvPPOLFiwoMdiMbONOofff9/9G/2SD/DRvHnsnNEUKtvo3AqQukF8XTeI0reS9anrTomwiEiuKPCkZBovPP88d915J9NO2dAJ+8svv+Q706dzxRVXMm7cuDa3Pfjgb/LSzBmtliUSCRobG/GSHkkvSWNjI4nExu3n16xZwzPPPNOy/sEHH+Tll17ioIO+0VLmtVdfZenSJRx9zDGttm1sbOStt9/mgAMO6M5L73U6t0KyjvDa15SQSDCS9anrT025RERyQUEnJSNGjGDChAnU19dz2GGHtyy/8847WL58Oeeff95G81r88AfnAH5NwL/+9S8aGjb8EnfVVVcyeNBArrnmNzz4wAMMHjSQq666EoBvfesYrv71rwFIxOP8/OeXMWqbkWwzcgS33Hwz993/QKvO3ffd9yemHnkklZWVrWJ+8sknmLzPPgwbNqy3TkuP0LktcMk6NaGR4LU0HVRiIiKS7SyzWUu+2GOPPdyL/57RccFuuPSSSxg4aBBnn312rx4n3f77T+HGG29k7Nid+uyYQdC5zWHNo2yp6Yxki3CUZNV4KKrsuKyIiLRSVVkx2zk3vrePo6RERHpOYq3/y7QXCzoSkdZCEZL99oIiDWQhItIVfZWUFPX2AUSkMFhsOaHaOXkx7K/neeA8nOeA/PzhpnMMCxlYiFAox1v7ejHCa1/HqxyHiwwOOhoREcmgpEREus0aPyO0/gNwyaBD2SQvmSDR1EQiHiMZj5GMx0kmYniJhP9IJvCSSZznUdiJyKYYFgoRCocJhYsIFfmPcFGEcHEx4eIIRcURikpKCIWz9KvFixNa9xZexVhc6fCgoxERkTRZ+s0hIjnBOUL187CGRZAlTUETTY3EmxqJNzaQaGr0H7EmvKRmku8eh/OSJL0kyXj7zfNC4SKKIiUUlZRSVFJKcWmU4tTfgXNJQuvfwyXr8Mq2h4x5kkREJBhKSkRk83gxQrXvYLHlwRze80g0NhBrrCfeUE+8sYF4Y32qpkOC5CUTxBoSxBpaj3ploRDFpWV+khItI5L62/q6aZhzWP1CQon1eJW7QijSt8cXEZGNZFVSYmYvACudc8e1sW4W8J5zbnrq+deBa4BxwFLgt8656/su2s654YYbuOOPt7ex/EYmfe1rAUSUP3RuA5SoJbxudp8N+es8z6/9aKgnVr8+lYg0oGZWucV5nv/+1a9PW2oUR6NESsuIlFVQHC2juKS0TxIViy0nvOYVklV7aGQuEZGAZVVS0llmth3wT+Ax4EJgb+AaM6t3zt0WaHAZ/vbXvzJ//vyNlq+v07j53aVzGwDnsKYlhNa/12v9R5xzJOMxYvV1xBrqiNXXqQYkrzm/pquhnrrVK4ENNSqRsnIi0XIiZeWEiyNYbzS1StYRXvMyXsXOuJIt1JxLRCQgOZmUAD8GlgCnOucSwHNmtjVwsZnd7gIY53jmzBkMG7YF22677SbL/PSiizj//Av6MKr8oHObJbwYoboPscYvenS3yUTC//W8oZ54Qx2xhnq8RO6P4CWbr60alVBRMZFoGcXRciJRv1YlXNRDX2EuSah2Di6+Eq98RzXnEhEJQK4mJYcC96USkmYPAGcCOwPv9mUwq1ev5rRTT2WLLbbgpZdf2Wj9kCFDGDFiJJf/8pdMmjSJfffdry/Dy2k6t9nBmpYRqvug2xMiJuNx4o0NxBrq/KZYDXUddpoWAfAScRpr19JYu7ZlWbg4QiRa7vdPiZZTXBolXFy82cewxi8Ix1fhlY/FlQzpibBFRKSTci4pMbNyYDgwN2PVh6l/d6CPk5I//OFWvvrqK66//ndtri8pKeGee+9l993GceUVV+jGuQt0bgPmNRGqm4s1LenS6FrO80jEY2kd0BuIN9STTCgBkZ6TjMdoiMdoWLe6ZVm4KOL3SymNtnSoLyqOdL6PSrKBUO2buNgWqjUREelDOZeUANWpf9dkLG/+Vurfh7EA8PS/nmbw4MEcMXXqJssMGzaMQw45hIcffpiGhgai0WgfRpi7dG4D4jys6QtCdfPanZ3d8zySsSbiqaF3400NJBr9IXlx6gMifS+ZiJGsjdFYm/YVYSF/SOLSUopLov4wxSWlhCMlbU8K6ZxfaxJbgVe+Pa5kS7AcnzxSRCTL5WJSknWWLPmCkSO3abMT5rnnnktDo9/kZZttRpFMJlm+fDkjRozo6zBzks5t37PYCkJ1H0FibarTeTw12WCMRKyJZKyJRCxGItaopleSG5xHvLGeeGM9mQ0Qw8URiiKlFEUihCMlFEVKCBdHUg9HqPZdaPgUr3wMLjIokPBFRAqBBdAnfJPM7Bmg1jl3TBvr3gJmAz8A1gPTnXN3pa0fBCwHTnDO/dnMsueFieSIsghsWQNFIf8R1kBEUuCSDhKe//hiFdQrD+8Vo4dBeWTD507YIKTPHylAXvNnjvM/f5auhuXrgo6K2c658b19kGyrKVkBjNzEumHAcudcnZl9ht93JF3z87kAu+++Oy/+e0avBJnprDPP5N577+Gll19hl112abNMQ0MDu+y8E9FolHffe79P4soHOrciIgXAixNqWIg1LIbUGDZeMkEitqGWNtHURDLu/5uINaF5iiQXWShMUapWtqikxK+hLS4hHPFraFualIajeOU74iJDAh+qvKqyok+Ok21JyQzgWDPb0jnXMu6omU0AhqTWAzwJHGNmFznXMlnCicBnwHt9GTDAd844g3vvvYezzvwejzz6GP37t+7W4pzjx+eey/Lly7n44kv6OrycpnMrIlLxBuH1AAAgAElEQVQAQsV45dtD6XBCdfOwpqWEwkVEokUQLduoePNgGommRuKNDS192uKN6s8m2SEULqK4NEpRSTStT1sp4eIOBs+wMF7ZKFx0FFi4b4LNEtnWfKsCeBsw4BfAYmBH4GJgPjDZOeelJk98G3gE+AOwF/BL4MzmyRP32GMP11c1JQDnn38ev7/pJrbYYgsu/9WvOPDAg4hEIrwzZw5XXHkFzz7zDHvsuSdPPfVPSktL+yyufKBzKyJSQJzD4isIrX+/y8OQO+dIxJrSRv6rJ97QoJH/pBcZRSUl/tDkpWUUl5ZRXNqJ5KMNLjIIr2IshMt7Ic7NV1VZ0SfNt7IqKQEwsy2Ay/HnIqkBlgF/B37qnFuXVm4f4BpgV+BL4Brn3PXN6/s6KfE8j5/+5CfcdNONtHVO99tvP+68624GDBjQZzHlC51bEZEC5CX8CVubPu/SkORtScbjG+ZHaqwnXq8hymVz+AlIpKzCT0BSw4+Hwt2s0QgV+021SrbIypH+CjYp6Sl9nZQ0mz17NnffdSfvvPsu8ViMUaNGcexxx3HUUUf3eSz5RudWRKTwWNMyQuvfA6+pR/ebjMeINdQTq68jVl9HvLEeL5noeEMpGOFICZFoOZHmCVqjZd1PQDIVV5Os3A3CGzdTzBZKSropqKREREREeliykdD6d7HYil47RHPTr1h9HfEGP1GJNTaoj0qBCIWL/CZY0XIiZeVEouWEi4t774AWwkVH4pVnjtuUffoqKcm2ju4iIiIirYVL8ar2wOo/JlS/oFcOYWYUpybWpL/fHNh5HvHGBmINdcQa6lv6qmjkr9xmoTDFpdGW5CMSLSMcKWlzTrReEYrgVeyCKxnSN8fLEUpKREREJPtZGFc+Bq+oH6Hat6Fl8M1ePGQo5N+4lm3oeOx5qck4WzrT+w/n9X480nWhomI/AYmmOqFHyyjqywQkU1EVyards64zezZQUiIiIiI5w5UMIRmeRHjd7C6PztUTQqEQJWUVlJRtmLvBOUcyHksbnriRRFMjiVgTXiLe5zEWHiMciVAUKfGH3y0ppbgkSlFplHBR9tzqupKheBW7Qih7YsomOisiIiKSW4qqSPabSLj2bYivDjoazKxlQrxMnueRjDWRjMdIxuP+v4kEXiKOl0zieQm8ZBLnef7DuW6PNpbTzDADs5D/CIcIhcJYOEyoqIhwUbH/KI74/0b8fy2UfaNWpXPRbfy5eLJwdK1s0adJiZkdA1wP9Mefc+Stvjy+iIiI5IlwlGTVnoTWv4c1fRl0NJsUCoUIlUYpLo0GHYoEwUJ4ZWNwZaOCjiTr9XW6djXwfedchRISEZHWrr/uOu69955e2fcp06axYEHvdBAWCUwoglexK65066AjyQnX3vYU9/x1ZqAxnHz2DSz4ZFmgMfQZK8Kr2EkJSSf1dVIyAni/rRVmpqZkIpLTnnjicaadfBKTJk7goAMP4OyzzuStN98E4NBDD2HC3nsxaeIEDjxgf372s4uor69v2XbVqlU8+uijHHfc8Z0+3vLlyzn4Gwe1WrZ48WL23ms8P7nwwlbLv3366fz+phu78epEslSoCK9iLC66TdCR9LrHn32bE8/6HXsf8X/sf8Iv+d6Ff+TNdz8B4JunXMH4wy5i7yP+jynH/4KfXvUQ9Q0b5nZZtWY9jz79JscfMaHH41q+ch0HnnR5q2WLP1/JnodexAW/eqDV8tOP35cb7/xXj8eQdULFeJW74kqHBx1JzugwKTGzT8zsXDN7x8zWmtmDZlaatv4/zWyBma0ys0dSM7Jn7qPEzNYDYWCOmX2ctu/zzewdoM7Misxsopm9bGZrzGyOmU1J2882ZvaimdWa2dNmdoOZ3dsTJ0JEpDvuuftufn3VVXz3u//Bc889z5NP/ZMTTjiR5194vqXMddf/jldefY0HH/oz8+bO5fbbb2tZ98gjD7PP5H0oLS1ta/dtmjlzBl//+tdbLfvV5Zez0047bVR2ypQpvPHGG6xcuXIzXp1IlrMQXvkOef2L9F1/mcFVv3+U/zx5f17480X8674LOOnIiTz/8gctZX7389N5/bHL+MstP2DugiXcdv8LLese/udsJu+9PaUlPT/3xozX57LPXmNaLfvl7x5m5+232qjs/l/bkdfnLGTlqtoejyNrhCJ4leNwJUODjiSndLZ24gTgEKAReAmYDtxsZgcAvwIOxq8BuRp4ANg3fWPnXBNQYWYOGOecS29DcDJwOLASGAI8DpwGPAUcCPzVzHZwzq0A7gNeSR1vQqrsw117ySIiPau2tpabbrqRSy/7OQcetKHmYr8pU9hvypSNyg8cOJBJX/sa8+bNa1n20syZHH30MS3PY7EY+0/Zj4aGBkpK/M6zTU1NFBUVcf3vbmDixInMnDGTww8/vGWbp558ksqqSsaNGsdnn37W6pglJSXsOHYsL7/8EkceeVRPvXSR7GGGV74DIeewxk/yqrN47fpGbrzzaX7+4+M4aPLOLcunTBrLlEljNyo/sKaSr48fw9wFS1qWzXxjHkcfsleXjx2LJdj3uJ/T0BijJOInNE2xOEXhMDf84nQm7TmaGa/P44gDd2/Z5snn51BZXspuY7fm0yVftdpfSaSYsaO35KVZH3HUwXt2OZ6sFyr2E5LIoKAjyTmdbb51vXNuiXNuFfAosFtq+SnAH51zb6YSjwuBSWY2sgsxXO+c+8w51wCcCjzhnHvCOec5554GZgGHmdnWwF7Az5xzTc65f6diEREJ1DvvzCEWi3HAAQd0qvyyZV/y0syZDB++oVp/wYIFjBg5suV5JBLhx+edz957T+CVV1/jlVdfY6uthvP7m29m4sSJxONx3nxzNhMnTQJg/fr13HTTTZx77rmbPO6obUbx0byPNu9FiuQIr2JHXOlICGoeil4w54PFxGIJDtxn41rQtny5Yi0zXp/H1lsOaFk2f9EyttlqYJePHYkUcf5ZU5mw+3a8/thlvP7YZQwfNoBbrjyDSXuOJp5IMvudRUzaczQA6+v8BOrHZx6xyX2O2now8z5e2uVYsp6FSFbtqYRkM3W2piR9WIt6oLmJ1hbAm80rnHPrzewrYEvgk07uO/3nvBHA8WY2NW1ZMfB86lirnXN1aesWA2qsJyKBWrNmLdXV1RR1MB7+//zwB5gZ9fX17L333px55lkt62praykvbz2Z1oL58xk92v+ib6iv5/PPP2P0aL+JxJtvzmbMmDEt29x44w0cc8wxDBmy6eYCZeVlrFyh5luS/7yKHQmZYfULgw6lR6yprae6XxlF4XC75X5w8T2YQX1DjAm7b8tZp3+jZV3t+gbKyjYesrgz5i/6ktHb+LOP1zfE+GzpV4zexv+smf3OIrbfdhjlqX3fcOe/OObQ8Qwd1G+T+ysvK2HFV+s2K5asZSGS/faC4pqgI8lZ3e1cvgQ/kQDAzMqBAcAXXdhHev3qZ8A9zrn/zCxkZiOA/mZWnpaYbJ2xvYhIn6uu7seaNWtIJBLtJia/vfY6Jk6cyKxZs7jwggtYs2YNVVVVAFRWVlJXV9eq/PwF8znssMNb/h44cGBL+ZkzZrLPPpMBmDt3Lq+9+hoPPvRQu3HW19VTWVm52a9TJJd4ZWP8plwNi4IOpduqK8tYs7aeRDLZbmJy3aWnMWnP0bwxZyEXXP4Aa9bWUVXhD0VcVRmlvr6pVfnv/OgWZr3T9vnZfacR3H3dmYCflBx+4G4tfw+sqaRfZRng9yeZvPf2AMxdsIRX31zAn28+p93XU1ffRGVFHg2RbEV4leOgeEDHZWWTupuU3A/cb2b3AR8ClwOvOec+2cz93Qu8YWbfBJ7BryWZCCxwzi02s1nApWb2E2BvYCrwSDdfg4hIt+y66ziKi4t5/vnn+MY3Du6w/Pjx4znyqCO55prfcO211wEwZswYFi9ezM47b2gvnl5T8tG8j1r+Br+T+2+u+S0As2a9wZIlX3DIN/1j19fX43keJ534MQ88uCFRWbhoYas+KCJ5zUJ45WMIuSTW+GnQ0XTLuLEjiETCPPfSBxy87y4dlt9r3CiO+uaeXH3LE1x/2bcBGL3NMD75YiU777Chgckd1/x3p47v15T4NSPzFi5t+RtgxuvzuPbi0wB4Y85ClixbzTemXQH4tSqe53HC4ut5KC1RWfjpco44aHfygoX9YX9LhgQdSc7r1pDAzrlngJ8BfwWWAtsCJ3Vjf58BRwE/AVbg15z8OC3Oafgd3FcBFwN3p29vZuvNbPLmHl9EZHNUVlZy1lln86vLL+e5556joaGBeDzOzJkz+O1vr2lzm1NOOZVXX3mlpbP7PvtMZvbsWS3rV61axerVqxk1yh9NaNEni9h6hF8x/cXnnxOLxVrWHXvscTz2+BM8+NCfefChP3P88cczefJkbvr9zS37a2pq4sMPPmDixEm9cg5EspKF/eGCI4ODjqRbKitKOfv0b/DL6x/m2Zfep6ExRjyRZMbr87jm1ifa3ObUb32dV9+cz7yP/c7ukydsz6w5Xa81WrVmPavX1rHtCP+me9GnyxmZ6pvy+dJVxGJJRo3wz+9xh+/NE3efx19u+QF/ueUHnDB1AvtO2IGbrzijZX9NsTgfzP+CSXuM3vhgucYMr3x7XOmWQUeSFzqsKXHOjcx4fknG85uBm+kE55xlPB/ZRpnXgP02sf1CoCXpMLNLgOq09RWdiUNEpKd9+/TTGTBwILf94VZ+cuEFlJeXs+PYsfzHf2zUGhWAmpoapk6dyq233MxvrvktR0ydyoknHE9jYyOlpaUsmD+frbYa3jJE8ODBg7nn7rs57NDDeP/991uabgFEo1Gi0Q1NIaJlZUQiJdTUbGjb/OKLLzJ+/F4MHpzbN2ciXWYhvH7jCa95BeKrg45ms51+/L4MqKnk1j89x4W/eoCyaAljR2/Jf53S9gAbNdUVTD1oD26+51l+e8lpHPmNPTjuv6+jsSnepWGB5y/6kuHDBrRsM2RgP+76ywwOO2A33pv3OZMnbN9SNloaIVoaaXleVhohEimipnrD7dkLr3zIXuNGMXhgVVdPQdbxynfARUcGHUbeMJfDQ+alkpLtnHOnZq7bY4893Iv/ntH3QYmIbKbrr7+OmpoaTj31tHbLnX32WZx00slMntz5iuFTT5nGJZdcynaj8+DXSZHN4cUIr30dEnnWwboLrrv9KWqqKzjt2H16ZH9n/uQOTj5qEvtO2KHT20z7/o1c+r/HtmoClotc2Si8sjFgfT0Ped+rqqyY7Zwb39vH0SzqIiJZ4pxzftCpcuPHj2evvbo238C9f7pvc0ISyR+hCMmq3f3EJNkQdDSB+MF3D+nR/e01bhR777Ztl7a574azezSGILiSIQWTkPSlnK4paY9qSkRERGQjiVrCa98ArzHoSCQHueIavOqJQYfRp/qqpkQpnoiIiBSOokq8yp3B1FhEuqioEq8qT0YNy0JKSkRERKSguMhgvIrOzY4uAkColGTl7hDavAkopWNKSkRERKTguJIt8Mo730FbClgoQrJqNyjSIK+9SUmJiIiIFB4zXHQbXMmwoCORLOeV7wjFNR0XlG5RUiIiIiKFyQyvandcZEDQkUiW8irGanLEPqKkRERERAqaVzEOwuVBhyFZxpUOx5VuHXQYBUNJiYiIiBS2cCnJqj0gVBp0JJIlXHENXuUumoukD+lMi4iIiGioYGlWVIFXtUfQURQcJSUiIiIiNA8VvGPQYUiQQiWpoX8jQUdScJSUiIiIiKS4kq3wykcHHYYEIVSMVzkOiiqDjqQgKSkRERERaWaGi26LKxkSdCTSx7yy7XGRgUGHUbCUlIiIiIiksxBe1Z5QXB10JNJHvPLtcVGNtBUkJSUiIiIibUhW7g7hsqDDkF7mSrfCRbcJOoyCp6REREREpC3haGqo4JKgI5Fe4opr8Cp21tC/WUDvgIiIiMimFFXhVe4KoeKgI5GeVlThN9NTQpIV9C6IiIiItMNFBuGV7xB0GNKTQiUkq/ZUsplFlJSIiIiIdMCVDser2CnoMKQnhEpI9hsP4fKgI5E0SkpEREREOsGVbo0r2zboMKQ7QsV4lbtAUb+gI5EMSkpEREREOsPMHzq2ZIugI5HNYYZXvhMuMjjoSKQNSkpEREREusCr2k2TK+Ygr2JXXKkSymylpERERESki7xKJSa5xKvYSTVcWU5JiYiIiEhXWdj/5V1NgbKbhfDKx+CiI8As6GikHUpKRERERDZHqBivcpwSk2xlIbyy7XBl2wUdiXSCkhIRERGRzRUqVlOubGQhvLIxSkhyiJISERERke4IFeFV7q4+C9nCwn4fkrJRQUciXaCkRERERKS7LOSPyqW+C8FqrrkqHR50JNJFRUEHICIiIpIvvIqdsHAZobqPwCWDDqewhKMkq/bQxIg5SkmJiIiISA9y0W3wwuWEat8DrzHocApDcX+SlbtDuDToSGQzqfmWiIiISA9zkcEkqyfhIgOCDiW/WQgX3YZkvwlKSHKckhIRERGR3hCO4lXthVe+g/qZ9IZwFK9qT7yKHcF0S5vr1HxLREREpLdYCFc2imTJEELr38NiXwUdUe6zEC46Eq9sNFg46GikhygpEREREelt4XK8fhOwpmWEGj6G+JqgI8o9FsJFhuKVj4FwWdDRSA9TUiIiIiLSR1zJEJKRwZBYRajhUyy2DJwXdFjZLVSKKxmGF90awuVBRyO9REmJiIiISF8yg+IBeMUDwEtg8ZVY/CsssQ6SDeCawLmgowyGhSBUggtX4IqrccUDoKhafUYKgJISERERkaCEinAlQ3ElQ1svL9ikRAMCFColJSIiIiLZRjfnUmBUFyYiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoFSUiIiIiIiIoEy51zQMfQKM1sBLA44jIHAyoBjkOyn60Q6S9eKdIauE+ksXSvSGds75yp7+yBFvX2AoDjnBgUdg5nNcs6NDzoOyW66TqSzdK1IZ+g6kc7StSKdYWaz+uI4ar4lIiIiIiKBUlIiIiIiIiKBUlLSu24NOgDJCbpOpLN0rUhn6DqRztK1Ip3RJ9dJ3nZ0FxERERGR3KCaEhERERERCZSSkh5mZmPN7FkzqzezJWZ2mZmFg45L+oaZHW9mj5jZF2a23sxmm9nJGWVeMDPXxqM0rcyUTZS5ou9flfQGM5u+iff4e2llzjKzx83sq9S6KW3sZzszu8XM3jGzpJm90JevQ3pXO58XzswmpZXbxcweM7O1ZlZrZq+b2Z4Z+yoyswvMbL6ZNZnZ52b2275/VdJdnfl/b76fmNlnZtZgZv82s90yynT4nZUqd6KZ/c3Mlqauvem99+qkJ3V0rZjZMDP7tZnNSV0Dn5nZXWa2RUa5O9v5LDo5VWZkO2XmdRRr3g4JHAQz6w88A3wAHAVsC/wGP/m7KMDQpO/8CFgE/A/+2O+HAfeZ2UDn3O/Syj0P/CRj26Y29ncKsDDt+Rc9GKtkhwOAhrTn6e/3twEH/BPY6EYhZSf86+xVoLg3ApRAnQVUZSy7DNgdeAMgdaM5A3gYODFVZi8gmrHdnfjX26XAXGA4MLY3gpZe15n/9xcAPwN+jP9+/wh4xsx2ds59mSrT2e+s44CRwGPAf/TsS5Fe1tG1sidwDHAb8BowBLgEeDl1raxPlfs5cHPGtmcC04CnU8+XApMyykSBfwFPdhSo+pT0IDO7EDgPGOGcW5dadh7+mzu0eZnkr9QH+cqMZfcBk5xz26SevwCsdM4d185+puAnLrs4597rvYglKKlfGu8AKtM+9DPLhJxznpntDLwL7O+ce6GtMqm//wIMdM5N6c3YJThmFgG+BB50zp2ZWvYqsNA5N62d7Q4BHgXGOec+6JNgpdd09P8+VfO+DPiNc+6y1LJy4BPgFufcRallHX5npR/PzCqAWuA7zrk7e/ElSg/pxLVSDax3ziXSlo0B5gHTnXN3tbPv94FPnXOHtlPmeOAhYKJz7rX2YlXzrZ51KPDPjOTjAfwscb9gQpK+lPnhnvIWsEUby0Xa1fxF0t0yklcOAfoD94PfZBiYAPyuvY2AM4DnlJDkh078v/8afg3bQ2nb1OEnpoemLevUd5Y+Z3JXR++dc25NekKSWvYRUE879y5mtit+Tev9HYRwMv6PJu0mJKCkpKftgF9F2sI59yn+G7tDIBFJNpgEfJSx7GDz+x3Vm9k/U/+52/Jcqg3oJ2Z2kal/Uj762MwSZjbPzP476GAk650EfI7fXAv8hASgf6pNeMLMPjaz72ZsNwH4yMxuMLN1qc+ev2W2G5e8sQOQBOZnLP+Qju9H2vrOkgKSuicpo/3r4CSgEfhHO/upwk+CH+jMcdWnpGf1B9a0sXx1ap0UGDM7EDga/1fKZi8CdwELgBHAT4EZZjbOOfdJqsxa4Ar8G48YcAR+O/BBwA/6JHjpbUvx23u/DoTxP+BvNrMy55w6H8tGzKwMOBK/+U1z2+uhqX/vBq7C72dyHHCbmS11zj2RVm46MAf/WqtMlf+7mU1M25/kh/74TXKSGctXA2VmFnHOxTI32sR3lhQQMwsB1+EntI+0U/RE4IkOuiYcDZSipEQkWGY2ErgPeDi97a1z7uK0YjPM7Bn8GrYfph44597Cr0Jv9oyZNQE/MrOfb6LKXXKIc+6f+B3Ymz2Zagd+kZldp+YS0oapQDmtm0tY6t/bnHNXpf5+3sx2BC4EnkgrZ8BRzrmvAMxsKf6PJAcAz/Zy7JLlNvWdJQXnV/i1Zfs55+JtFTCzCcAo4PwO9nUy8L5z7t3OHFjNt3rWaqBfG8v7p9ZJgTCzGvyRJhbjj6C1SalRUF4C9uhgt3/B/yFhU029JPf9BajBH+VGJNNJwALn3Ky0Zc3fLc9nlH2O1iNrrQbebU5IUmbi18RqBK78sxqoaKPJb3+gPrOWpCvfWZK/zOws/NHaTu+gD8hJ+AMePN7OvgYAB9Fxn5MWSkp61lwy2mqa2XD8dnlz29xC8k6qicVjQAQ4wjlX34nNXOrRUZn0fyX/6D2WNplZP/y22Zlf8B82F8ncBPAyymWWaauc5Ie5+M1Ct8tYvlHf1838zpI8Y2bH4g+YcZ5z7sF2yoWAE4B/OOcaNlUOvxlpEZ1sugVKSnrak8A3zawybdmJ+HMQvBhMSNKXzKwI+DMwGjjEObe8E9sMBfYBZndQ9DggAbzT3Tglax2HP1fA4qADkaxzDFDCxknJy/i/ih+QsfxA/P4jzR4DdjGzgWnL9sWftyC9nOSHl4F1wPHNC1LJx1TS5ovYnO8syT+paQj+BPzOOXd1B8X3xR+VqzOjbr3unPu4s3GoT0nPuhk4B/ibmV2J397uEuAazVFSMG7Cn6ToB8CAVPVls7eA7fHba/4Z/8Zza/x23x5wbXNBM/s9sAK/02ostc/vA9dmNL+QHGVmf8Xv5P4O/i+aJ6Ye56SNKT8evynX8NRm+6VuKj9pbsKTutE4LLV+S6DKzJrnwHlCv3rmjZOAOc65D9MXOudiZnYZcJWZrcH/zDgW/8YhfSj6W/G/nx41s8vxO7pfCTzjnJvZFy9Aek5n/t+b2RXAz8xsNRsmTwzRevjodr+znHNNqeONxW/mV5paN97M1gMrnHP60TWLdXSt4A+48w/8a+RBM5uYtvmKNpKKk/B/PHuaTUiN6jcZ+N8uBeuc06MHH/j/aZ/Drx1Zij8DZjjouPTos/f/EzY0xcp8jEx9IDyRujZiwFfAX4EdMvZzDv7Nai3+TO/v43eCt6Bfox49dq1cjj85VX3q82I2cFpGmTs3cS3dmVZmZHvXXNCvU48euVYGAnHggnbKNM/MHcOfaPNbbZTZLvX5U4dfu3In0D/o16fHZl0THf6/x2+a91P8IaQb8Edz3D1jP+1+Z6WVu2QTZV4I+lzo0b1rBX9Uvk2tvzNjX0X4P5je3MExf4g/JPUWXYlVM7qLiIiIiEig1KdEREREREQCpaREREREREQCpaREREREREQCpaREREREREQCpaREREREREQCpaREREREREQCpaRERKQLzGy6mc02s1ozW21mb5nZNT18jL3N7JKe3Gc2M7NLzGxlD+xnTGpf1RnLp5uZM7OK7h6ju8zsETO7uIMyR6TiHZl6Pjj1ukZmlBtvZqvMrF9vxSsi0leUlIiIdJKZXQjcBvwT+BbwbeBh4MgePtTeQLs3rtKmMfjnrTpj+ePAJPyJKgNjZhOAA2g9o3ZnDMZ/XSPTFzrnZgFvAf/TE/GJiASpKOgARERyyPeBW5xzP0lb9qiZXRpUQNIx59wK/FmIg3YO8LBzblUP7vMO4Goz+4VzLtGD+xUR6VOqKRER6bxq4MvMhc451/y3mb1uZndmljGzO83srdTfxWZ2tZl9amZNZrbEzP5uZhEzm07ql/RUEx5nZi+k7WdnM3s81Xys1sz+bGZD09ZPSW1zoJk9bGZ1ZjbfzA42s7CZ/drMVprZF2b2o868aDP7TzN718wazWyZmf3FzPqZ2WFm5pnZNhnlt0ktPypt2TGpc9NgZl+Z2RNmNqKdY9aY2a2p4zWa2cupmoZNlZ8CPJp6uih1Dj5JrWvVfMvMRqaen2Rmd5jZOjP73MxOTa0/L/WerDCzK80slHGsdt+DTcRXCRwD/CVjuaWaZi1P7etuoCpt/Ujg3dTT55uvibRdPALUAN9s7/giItlOSavvufEAAAbqSURBVImISOe9Cfw/MzvdzAZsosztwHHp/RdSfx8H/DG16ELgFOBnwDeAHwJrgTB+U6PfpMpNSj3OSu1nO+AloBQ4FZgO7IRfW2MZcdwCzMS/EV6MfzN8A1AJTEs9/017N/qpY16U2teLwNHAmalYK/CbsS0BTs/YbDqwPPVaMLPTgL8BHwMnAN8BPgIGbeKYJcAzwEHAj1PHXQE8087N/5vAuam/v4V/3o5p77UBVwJLgWOBGcBdZvYb/OZzZwDXAuelYm6OrSvvQbqvAVHg5Yzl5wD/B9yKf400AFelrV+Kf60AnM2GawIA59w64H38cyUikrucc3rooYceenTiAewKLAQc4OHfDF4GVKWVqQLqgO+kLTsDaAIGpJ4/BvymneN8n1QFTMbye4B5QCRt2WggCRyeej4lFd/FaWXGppY9l7YshF/rc2U7cVTj98O4pp0yvwAWAZZ6bsAnwNVpx/kC+Fs7+7gEWJn2/LtADBidtqwIP6n5dTv7OSL1OkdmLJ+eWl6Rej4y9fyOjPctDswHwmnLXwce7Mp7sInYfgKsyFgWxk/qfp+x/On01wHsnHo+ZRP7vhN4Kej/H3rooYce3XmopkREpJOcc+8AO+J3bL8J/wb8Z8Cs5poR5/9y/Rf8G+Fm04FHnHNfpZ6/DUxPNRPatYNf2NMdBPwd8MysyMyK8BOCT4DxGWWfTft7Qerf59Jei4efYG3ZzvEm4f+6f0c7Zf4IjMBPhgD2Tz1v3mZ7YIsO9pHpIGA2fjOs5tcJfm1N5uvsjpZzlHrfVgAvOueSaWUW0PocdeU9SDcUyBxhbDgwDH+whHR/68JrILXfdpuPiYhkOyUlIiJd4Jxrcs496pz7vnNuLPAf+L+Ufzet2O3AZDMbZWbbApPZ0HQL/NqFG/GbZc0BPjOzH3Ti8AOB8/F/0U9/jMK/wU23Ji3mWOaylBh+M6RNaW6itnRTBZxzC4EX8Jtkkfr3defc+53dRxsGAhPZ+HV+h41fZ3e0dT46OkddeQ/SleLXlqVrTiSWZyzPfN6RJtp/H0VEsp5G3xIR6Qbn3O1mdhWwQ9qyf5vZfPwaEsNvovOvtPWN+P0I/s/MRgPfA641s3nOuafaOdwq/F/pb2tjXbfn+WhDc83OsA72fxvwB/OHTP4W8L+b2EdnrQJm4fdfyZR5Y9/XNvc9WMXGQxU3D5owOGN55vOOVKf2LyKSs5SUiIh0kpkNds4tz1g2COgHLMso/kdSHdSBuzOaBLVwzs03s3PxOzGPBZ7C/3UeMytNJTDNnsXvVD3bOec22lnPewW/4/XpbOhE3pa/4df8/P/27iBEqyoK4Pj/gOVC3ChtDELcqKCLMGtthBAtIhWXuQhpE0gQs27G0oWCJW4mSFTQmU2kQbUyLSnIBBe2aEKQjEBaVeIgRB4X5w4ND8cZh+/zNfT/bd4w774393tvFt95557zJqkM/OSsfVNUTcke/u2ONZ/zwHbgZvd6z2MmIzTMrMFi78EUsCYilmfmTGD1KxWYvErd9xk7OsfO97nWUo0DJGnJMiiRpIW7FhHnqKzH71TtxDtUMfjJztiT1DKtZXTqKSLiU6pm4ir1pX9XG/dNG/JT2+6LiK+AvzJziioIvwx8HhHHqSfzT1MdvE5k5sVBfVCAzPwjIvYD70fEk8AXwHLgFWA0M39r4+5GxGkqsJrIzNlLx+5FxAhwuo2ZoIq2X2xjrzzgT5+iskcXI+IwVfuymuqKdSszj8wx5am2fTMiJoHpzLw2x9jFepfF3YNvgSeAzVQWiMz8p2XZDke90f4S1QlsY+fYm7TgMCL+BP7uXLfnqE5ikrRkWVMiSQs3Rj2VPkoFJvupDlzPZ+aN2QMz8xbwPdUVqfsU+zuqze0Zqsh5C7Bz1hfNS8AhYF87x3g7589UrcU01UL2S2CUWtJ0nSHIzIPUMqqX2lzHqeVCtztDz7bt8c7vycwz1JftDVQTgFPt5we+0LBlh7ZRXahGqWv9IVW7c/khc/2FChJ3UEHAQjMzC7bYe9CO+xF4ubPrA+AAFYR9QrVaHukcexfYS/2ffA38MLMvIp6lWis/anG8JP2nxONZASBJ/y8RsYpatvRWZn7c93yGrT3x3w2sa5291BERbwNvZOamAZ7zILA1M31PiaQlzUyJJA1QRKxsLyQ8RmUTJnqe0lBFxPqIeI3KphwzIHmoj4CnImIgAURErKAyKO8N4nyS1CdrSiRpsLYAF6i3qL+emdM9z2fYxoEXgM+oZW2aQ2beiYg9wIoBnfIZYGzQtUSS1AeXb0mSJEnqlcu3JEmSJPXKoESSJElSrwxKJEmSJPXKoESSJElSrwxKJEmSJPXKoESSJElSr+4DhGlZezb/MgsAAAAASUVORK5CYII=\n"
          },
          "metadata": {},
          "execution_count": 68
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "In torchquantum, extract_amp can use to get the amplitudes from pulses, you can also choose extract_realamp for only the real part of pulse amplitudes and ignore the imaginary part. We also have extract_phase to get the classical phase from pulses."
      ],
      "metadata": {
        "id": "HPJYbvz9iG5B"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "parameters_array = extract_amp(pulse_ansatz)\n",
        "print(parameters_array)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "uy5dxMqCNJeg",
        "outputId": "3e7636b0-91a2-4a10-9b91-1c773db9c6b1"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[ 0.1007186   0.00833101  0.096837    0.02080554  0.20122114 -1.57079633\n",
            "  0.096837    0.02080554  0.11225338  0.01509274  0.7727792  -2.96348159\n",
            "  0.20122114  0.          0.11225338 -3.12649991  0.7727792   0.17811106]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## **VQE Model Setup**"
      ],
      "metadata": {
        "id": "9F3AQeMnig-h"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Here we use an example of Hydrogen molecule. And we give a pauli string here based on sto3g basis and with parity mapping as well as two-qubit reduction."
      ],
      "metadata": {
        "id": "BjDLnHUHiozd"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "n_qubit = 2\n",
        "pauli_dict = {'II': -1.0523732, 'IZ': 0.39793742, 'ZI': -0.3979374, 'ZZ': -0.0112801, 'XX':0.18093119}"
      ],
      "metadata": {
        "id": "AQXIa7CtNNbN"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "map_amp is a method in torchquantum introduce to map the adjusted amplitude to the pulses then get new pulses and send to quantum machine. observe_generate is a method to genrate the observe-pulses of the hydrogen molecule. run_pulse_sim is use to run the updated pulses in pulse simulator."
      ],
      "metadata": {
        "id": "qjU3El9qi4mg"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "def vqe(cur_best_w):\n",
        "    backend = FakeJakarta()\n",
        "    modified_list = ((cur_best_w[:int(len(cur_best_w)/2)])*np.cos(cur_best_w[int(len(cur_best_w)/2):]) + (cur_best_w[:int(len(cur_best_w)/2)])*np.sin(cur_best_w[int(len(cur_best_w)/2):])*1j)\n",
        "    modified_list = np.ndarray.tolist(modified_list)\n",
        "    sched1 = snp(0, backend)\n",
        "    sched2 = tnp(0,1,backend)\n",
        "    pulse_ansatz = pul_append(sched1, sched2)\n",
        "    prepulse = map_amp(pulse_ansatz, modified_list)\n",
        "    measurement_pulse = observe_genearte(prepulse, backend)\n",
        "    XX_YY_ZZ_expect = run_pulse_sim(measurement_pulse)\n",
        "    H_expect = pauli_dict['II'] + pauli_dict['IZ']*XX_YY_ZZ_expect[0] + pauli_dict['ZI']*XX_YY_ZZ_expect[1] + pauli_dict['XX']*XX_YY_ZZ_expect[2] + pauli_dict['ZZ']*XX_YY_ZZ_expect[3]\n",
        "    return H_expect"
      ],
      "metadata": {
        "id": "KbrcJ4kiNbPU"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "Note, here we use COBYLA as the optimizer to train the pulse ansatz."
      ],
      "metadata": {
        "id": "Yq2cVwvFjhuK"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "vqe_result = minimize(vqe, parameters_array, method='COBYLA', constraints=gen_LC(parameters_array),\n",
        "                        options={'rhobeg': 0.1, 'maxiter': 2, 'disp': True})\n",
        "print('The estimated ground state energy from pulse level VQE algorithm is: {}'.format(vqe_result.fun))\n",
        "print(\"\\nThe optimal parameter theta is : {} \".format(vqe_result.x))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Z5ZG9qg-NcA2",
        "outputId": "5af21680-2a17-4463-dac9-aeb7230c3661"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/qiskit/compiler/assembler.py:461: RuntimeWarning: Dynamic rep rates are supported on this backend. 'rep_delay' will be used instead of 'rep_time'.\n",
            "  RuntimeWarning,\n"
          ]
        }
      ]
    }
  ]
}
